我正在阅读Effective 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;
}
}
– 和一个类:Employee,它扩展了它。
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()