Я читаю главу сериализации в "Эффективной 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 y) {
this.name = name;
this.age = y;
}
}
икласс 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?Когда они будут нарушены?Я скопировал и вставил код для метода readObjectData () в класс Employee, но он так и не был вызван.Когда будет вызван метод readObject ()?Я что-то упустил?