这可能是显而易见的,但我并没有完全了解序列化:
我有一个对象,它保存我的应用程序的状态。该对象引用了多个其他对象。
例如
ApplicationState implements Serializable
private ArrayList<SomeApplicationObjects>
private AnApplicationObject
private AnotherObject
据我所知,所有这些对象(someApplicationObjects,anApplicationObject,anotherObject)都需要可序列化。
但是对象它们的引用也需要可序列化吗?例如,这里的SubObject是否也需要可序列化?这实际上是否意味着每个子对象都需要从ApplicationState向下递归地进行序列化?
AnotherObject implements Serializable
private SubObject
答案 0 :(得分:2)
这是否意味着每个子对象都需要可串行化,递归
假设子对象是您在类中使用的对象。是的,Searializable类型中使用的对象也是可序列化的。
在哪里
可序列化类的所有子类型本身都是可序列化的
答案 1 :(得分:1)
是的,正如接口serializable的javadoc中所报告的那样:
实现java.io.Serializable接口的类启用了类的可序列化。未实现此接口的类将不会将其任何状态序列化或反序列化。 可序列化类的所有子类型本身都是可序列化的。
因此,如果A必须是可序列化的,则A的子类型(例如B和C)也必须是可序列化的。所以B和C也应该有可序列化的子类型,等等......
答案 2 :(得分:0)
在java doc中提到序列化;
为了允许序列化非可序列化类的子类型,子类型可以承担保存和恢复超类型的公共,受保护和(如果可访问)包字段的状态的责任。只有当它扩展的类具有可访问的no-arg构造函数来初始化类的状态时,子类型才可以承担此责任。如果不是这种情况,则声明类Serializable是错误的。将在运行时检测到错误。
在反序列化期间,将使用类的public或protected no-arg构造函数初始化非可序列化类的字段。必须可以对可序列化的子类访问no-arg构造函数。可序列化子类的字段将从流中恢复。
遍历图形时,可能会遇到不支持Serializable接口的对象。在这种情况下,将抛出NotSerializableException,并将标识非可序列化对象的类。
所有子对象必须是可序列化的。