私はEffectiveJavaのシリアル化の章を読んでいます。私は本にある以下の段落を理解しようとしています。
シリアル化および拡張可能なインスタンスフィールドを持つクラスを実装する場合は、注意が必要です。インスタンスフィールドがデフォルト値(整数型の場合はゼロ、ブール型の場合は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()