Java:在序列化过程中何时添加 readObjectNoData()?
我正在阅读有效Java中的序列化章节。我试图理解下面的段落,这是在书中找到的。
如果实现的类具有可序列化和可扩展的实例字段,则应注意一点。如果类具有在将类的实例字段初始化为其默认值(整数类型为零,布尔值为 false,对象引用类型为 null)时会违反的不变量,则必须将此 readObjectNoData 方法添加到类中:
// readObjectNoData for stateful extendable serializable classes
private void readObjectNoData() throws InvalidObjectException {
throw new InvalidObjectException("Stream data required");
}
我不确定这句话是什么意思。
为了测试这一点,我创建了一个名为Person的类(可序列化和可扩展)
class Person implements Serializable {
private String name;
private int age;
Person() {
this("default", 1);
}
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
– 和一个类:员工,它扩展了它。
class Employee extends Person {
String address;
public Employee() {
super();
address = "default_address";
}
public Employee(String name, int age, String address) {
super(name, age);
this.address = address;
}
}
我创建的 Person 类中是否有任何不变量?它们何时会被违反?我在 Employee 类中复制粘贴了该方法的代码,但它从未被调用过。何时调用该方法?我错过了什么吗?readObjectData()
readObject()