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



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

在反序列化过程中,将使用类的公共或受保护的无参数构造函数初始化不可序列化类的字段 。无参数构造函数必须可被可序列化的子类访问。可序列化子类的字段将从流中恢复。"

当我们谈论可序列化接口时,我们谈论的是实际操作中的自动序列化机制。如果它是自定义的,我们会讨论可外部化接口。因此,当oracle-doc说"为了允许不可序列化类的子类型被序列化,子类型可能承担责任"时,看起来这是自动序列化机制的一部分。我的问题是:如何在Java上解释Oracle文档?子类承担责任是自动的,还是子类的开发人员必须编写代码来序列化没有实现可序列化接口的父类?

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

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

然而,您可能需要对这些进行序列化(和反序列化),在这种情况下,责任由您承担。

规范接近于法律(有界)语言。

最新更新