是否可以序列化非静态内部类?
如果是,你可以提供一个很好的例子。
我搜索了一些博客,没有回答的网站说服了我。
修改 内部类具有最终的staic变量怎么样。
答案 0 :(得分:8)
内部类包含对外部类的隐式引用,因此适用于 一个可序列化的内部类,它的外部类也必须如此。
完全来自文档:
内部类的序列化(即,不是的嵌套类) 静态成员类),包括本地和匿名类 因为几个原因而强烈沮丧。因为内在的阶级 在非静态上下文中声明包含隐式非瞬态 引用封闭类实例,序列化这样的内部 类实例将导致其关联外部的序列化 类实例也是如此。由javac(或其他人)生成的合成字段 JavaTM编译器)实现内部类是实现 依赖,可能在编译器之间有所不同;这些领域的差异 可能会破坏兼容性并导致默认冲突 serialVersionUID值。分配给本地和匿名的名称 内部类也依赖于实现,并且可能不同 编译器。由于内部类不能声明其他静态成员 比编译时常量字段,他们不能使用 serialPersistentFields机制,用于指定可序列化字段。 最后,因为与外部实例关联的内部类没有 有零参数构造函数(这种内部类的构造函数) 隐式接受封闭实例作为前置参数), 他们无法实现Externalizable。上面没有列出的问题, 但是,适用于静态成员类。
所以
因为在非静态上下文中声明的内部类包含隐式 对包含类实例的非瞬态引用,序列化 这样的内部类实例将导致其序列化 相关的外部类实例。