序列化内部类实例

时间:2012-05-29 10:56:13

标签: java serialization inner-classes

是否可以序列化非静态内部类?

如果是,你可以提供一个很好的例子。

我搜索了一些博客,没有回答的网站说服了我。

修改  内部类具有最终的staic变量怎么样。

1 个答案:

答案 0 :(得分:8)

  

内部类包含对外部类的隐式引用,因此适用于   一个可序列化的内部类,它的外部类也必须如此。

完全来自文档:

  

内部类的序列化(即,不是的嵌套类)   静态成员类),包括本地和匿名类   因为几个原因而强烈沮丧。因为内在的阶级   在非静态上下文中声明包含隐式非瞬态   引用封闭类实例,序列化这样的内部   类实例将导致其关联外部的序列化   类实例也是如此。由javac(或其他人)生成的合成字段   JavaTM编译器)实现内部类是实现   依赖,可能在编译器之间有所不同;这些领域的差异   可能会破坏兼容性并导致默认冲突   serialVersionUID值。分配给本地和匿名的名称   内部类也依赖于实现,并且可能不同   编译器。由于内部类不能声明其他静态成员   比编译时常量字段,他们不能使用   serialPersistentFields机制,用于指定可序列化字段。   最后,因为与外部实例关联的内部类没有   有零参数构造函数(这种内部类的构造函数)   隐式接受封闭实例作为前置参数),   他们无法实现Externalizable。上面没有列出的问题,   但是,适用于静态成员类。

所以

  

因为在非静态上下文中声明的内部类包含隐式   对包含类实例的非瞬态引用,序列化   这样的内部类实例将导致其序列化   相关的外部类实例。

Source