Я читаю главу сериализации в «эффективной Java». Я пытаюсь понять ниже абзац в книге.
Если вы реализуете класс с полями экземпляра, который является сериализен И расширяемая, есть осторожность, о которой вы должны знать. Если класс есть инварианты, которые были бы нарушены, если его поля экземпляра мы Инициализирован к их значениям по умолчанию (ноль для интегральных типов, false for boolean и null for reforts types), вы должен добавить Этот метод ReadobjectNodata к классу:
// readObjectNoData for stateful extendable serializable classes
private void readObjectNoData() throws InvalidObjectException {
throw new InvalidObjectException("Stream data required");
}
Я не уверен, что означает вышеуказанная ставка.
Чтобы проверить это, я создал классное лицо (как сериализуемые, так и расширяемые)
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;
}
}
и работник класса, который расширяет его.
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;
}
}
Есть ли какие-либо инварианты в классе человека, которого я создал? Когда они будут нарушены? Я копирую вставил код для readobjectData () метода в классе сотрудника, но он никогда не звонил. Когда будет называться метод ReadObject ()? Я что-то упускаю?