palkonimo
palkonimo

Reputation: 103

Inheritance of private inner class

I want to implement Serializable into a class, but I am not allowed to modify it. My idea was to make another class which inherits from the other class. But the original class is built like this:

public class ClassName {

    private class InnerClass{
        private InnerClass(){
            //do stuff
        }
    }

    public ClassName(){
        //do stuff
    }
}

So following does not work because InnerClass is private thus not visible:

import java.io.Serializable;

public class ClassTwo extends ClassName implements Serializable{

    private class InnerClass extends ClassName.InnerClass implements Serializable {
        private InnerClass(){
            super();
        }
    }

    public ClassTwo(){
        super();
    }
}

Is there a way to implement Serializable into ClassName without changing the original class?

Upvotes: 0

Views: 312

Answers (1)

Silvio Mayolo
Silvio Mayolo

Reputation: 70277

If you have read/write access to all the slots you care to serialize, you can create an adapter class.

public class MyClassAdapter implements Serializable {
    private MyClass instance;
    ...
}

Then just wrap the instance in this adapter class before serializing, and extract it after deserializing.

If you don't have read/write access to the slots, there's probably a good reason for that, and serializing data you don't own is a bad idea.

Upvotes: 1

Related Questions