Why is a serializable inner class not serializable?

前端 未结 3 917
长情又很酷
长情又很酷 2020-12-05 13:56

The following code:

public class TestInnerClass {

    public static void main(String[] args) throws IOException {
        new TestInnerClass().serializeInne         


        
相关标签:
3条回答
  • 2020-12-05 14:21

    how about make TestInnerClass serializable?

    public class TestInnerClass implements Serializable { }
    
    0 讨论(0)
  • 2020-12-05 14:24

    InnerClass cannot be serialised because to instantiate it (as required during deserialization) you need a reference to an instance of the outer class

    Instances of inner classes cannot exist without an instance of the outer class.

    i.e

    OuterClass o = new OuterClass();
    OuterClass.InnerClass o_i = o.new InnerClass();
    

    If you use static inner class, it will be possible to serialise the static inner class. The instances of static inner classes can be created standalone.

    i.e

    OuterClass o = new OuterClass();
    OuterClass.InnerClass i = new OuterClass.InnerClass();
    
    0 讨论(0)
  • 2020-12-05 14:44

    what if InnerClass needs this access?

    Then it needs the outer class instance, and it must be serialized along with the inner class.

    Is there a way to serialize a non-static inner class without the enclosing class, e.g. by making the reference to the outer class transient?

    No. What would happen when you deserialize such a class and then try to call an instance method of the outer class? A NullPointerException?

    0 讨论(0)
提交回复
热议问题