为什么可序列化的内部类不可序列化?

如下代码:

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允许对其私有访问TestInnerClass的字段和方法的字段。声明内部类static

可以解决它,但是如果InnerClass需要此访问权限怎么办?有没有一种方法可以在不包含封闭类的情况下序列化非静态内部类,例如通过引用外部类transient

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

回答:

如果InnerClass需要此访问权限怎么办?

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

有没有一种方法可以在不包含封闭类的情况下序列化非静态内部类,例如通过使对外部类的引用变为瞬态?

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

以上是 为什么可序列化的内部类不可序列化? 的全部内容, 来源链接: utcz.com/qa/415082.html

回到顶部