gpt4 book ai didi

java - 在 Serializable 类中使用私有(private)构造函数扩展类

转载 作者:行者123 更新时间:2023-11-30 07:15:17 26 4
gpt4 key购买 nike

http://docs.oracle.com/javase/6/docs/api/java/io/Serializable.html 上详细说明 Serializable 的文档

“为了允许不可序列化类的子类型被序列化,子类型可以承担保存和恢复父类(super class)型的公共(public)、 protected 和(如果可访问)包字段的状态的责任。只有在以下情况下,子类型才可以承担这个责任它扩展的类有一个可访问的无参数构造函数来初始化类的状态。如果不是这种情况,则声明一个可序列化的类是错误的。该错误将在运行时检测到。”

一般来说,任何具有私有(private)构造函数的类都不能被扩展。并且此错误将在编译时可见。但是上面文档的最后一行说它将在运行时发生。有什么解释吗?

最佳答案

文档说一个不可序列化的父类(super class)型需要一个无参数的构造函数。它并没有说它应该是私有(private)的。相反,它说这个构造函数应该是可访问的。文档关于运行时的意思是这样的

class A {
A() { <-- accessible only in current package
}
}

public class B extends A implements Serializable {
public B() {
}
}

假设 A 和 B 在同一个包中。没有编译错误。但是,如果我们尝试从另一个包中的类 C 反序列化 B 的实例,我们将得到运行时异常,因为 ObjectInputStream 将尝试调用 A 的无参数构造函数,但无法从包外部访问它

关于java - 在 Serializable 类中使用私有(private)构造函数扩展类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17921843/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com