【发布时间】:2011-10-31 23:24:19
【问题描述】:
以下代码:
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 的字段和方法。声明内部类为静态solves it,但如果InnerClass 需要此访问权限怎么办?有没有办法在没有封闭类的情况下序列化非静态内部类,例如通过引用外部类transient?
edit:例如,只有在序列化之前才需要访问外部类。好的,编译器不知道,但我认为这就是 transient 关键字存在的原因。
【问题讨论】:
-
您是否尝试将内部类声明为静态?
private static class InnerClass
标签: java serialization inner-classes