Java: Когда добавить readobjectNodata () во время сериализации?

Я читаю главу сериализации в «эффективной 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 ()? Я что-то упускаю?

23
задан Geek 21 August 2013 в 12:49
поделиться