如下代码:

public class TestInnerClass {

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

    private void serializeInnerClass() throws IOException {
        File file = new File("test");
        InnerClass inner = new InnerClass();
        new ObjectOutputStream(new FileOutputStream(file)).writeObject(inner);
    }

    private class InnerClass implements Serializable {

        private static final long serialVersionUID = 1L;

    }

}

引发以下异常:
Exception in thread "main" java.io.NotSerializableException: TestInnerClass

我猜内部类有一个TestInnerClass.this字段,它允许它私有(private)访问TestInnerClass的字段和方法。声明内部类为静态solves it,但是如果InnerClass需要此访问权限怎么办?有没有一种方法可以在没有封闭类的情况下序列化非静态内部类,例如通过引用外部类transient

编辑:例如,仅在序列化之前才需要访问外部类。好的,编译器不知道这一点,但是我认为这就是存在transient关键字的原因。

最佳答案



然后,它需要外部类实例,并且必须与内部类一起序列化。



不。当您反序列化此类时,尝试调用外部类的实例方法会发生什么? NullPointerException

关于java - 为什么可序列化的内部类不可序列化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7144912/

10-14 10:27