我有以下类层次结构
ParentInterface
|
v
ParentClass
/ \
v v
SubClass1 SubClass2
接口不扩展Serializable
接口,并且所有类都没有实现Serializable
接口。所有类都被编译并打包到一个jar文件中。
现在,我更改了ParentInterface
,以便扩展Serializable
界面。在此之后,我只替换jar中的ParentInterface.class
文件。
我有一些代码,我正在尝试序列化SubClass1
和SubClass2
的实例。在尝试序列化时,我得到NotSerializableException
。
我假设,如果我再次编译了所有类并在我的jar中替换它们,它就会起作用。如果我只替换ParentInterface
?
答案 0 :(得分:1)
可序列化类的所有子类型本身都是可序列化的。
根据JavaDoc,SubClass1和SubClass2应该是可序列化的..除非它们有一些不可序列化的字段。
仔细检查SubClass1
和SubClass2
内字段的可串行性。
答案 1 :(得分:1)
这可能会有所帮助..
根据定义,SubClass1 和 SubClass2 可序列化
但是,建议您特别注意 SubClass1 和 SubClass2 中包含的字段。注意JDK中描述的以下限制。
在反序列化期间,将使用类的public或protected no-arg构造函数初始化非可序列化类的字段。必须可以对可序列化的子类访问no-arg构造函数。可序列化子类的字段将从流中恢复。
请务必将“不可序列化”字段设为 transient 或采取适当行动。