gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:00:27 34 4
gpt4 key购买 nike

以下代码:

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?

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

最佳答案

what if InnerClass needs this access?

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

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?

没有。当你反序列化这样一个类然后尝试调用外部类的实例方法时会发生什么? NullPointerException?

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

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com