如果可序列化类的父级没有实现可序列化,则父级将自动序列化?

时间:2016-03-24 13:22:49

标签: java serialization

这种混淆是由Oracle的Java文档创建的:https://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html 它说:"为了允许序列化非序列化类的子类型,子类型可以承担责任,用于保存和恢复超类型的公共,受保护和(如果可访问)包字段的状态。只有当它扩展的类具有可访问的no-arg构造函数来初始化类的状态时,子类型才可以承担此责任。如果不是这种情况,则声明类Serializable是错误的。将在运行时检测到错误。

在反序列化期间,将使用类 的public或protected no-arg构造函数初始化非可序列化类的字段。必须可以对可序列化的子类访问no-arg构造函数。可序列化子类的字段将从流中恢复。 "

当我们谈论可序列化接口时,我们讨论的是自动序列化机制。如果它是自定义的,我们一直在谈论Externalizable接口。因此,当oracle doc说"为了允许序列化非序列化类的子类型,子类型可以承担责任"看起来这是自动序列化机制的一部分。我的问题是:如何解释Java上的Oracle文档?承担责任的子类是自动的还是子类的开发者必须编写代码来序列化未实现可序列化接口的父类?

1 个答案:

答案 0 :(得分:0)

正如医生所说:你可能承担责任。

这意味着默认情况下,这些值将通过调用super()无参数构造函数来建立。

但是可能需要这些序列化(和反序列化),在这种情况下责任是你的。

规范接近于合法(有界限)的语言。

相关问题