Подтвердить что ты не робот

Отключить переходный элемент объекта к ненулевому умолчанию в Java

public class MyObj implements Serializable {
  private transient Map<String, Object> myHash = new HashMap<String, Object>();
  ...
}

Есть ли способ гарантировать, что, когда объект класса выше десериализован, член myHash будет установлен на новую пустую карту, а не на значение null?

4b9b3361

Ответ 1

public class MyObj implements Serializable {
    private transient Map<String, Object> myHash = new HashMap<String, Object>();

    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
        in.defaultReadObject();

        myHash = new HashMap<String, Object>();
    }
}

Ответ 2

Как насчет добавления метода readObject:

public class MyObj implements Serializable {
  private transient Map<String, Object> myHash = new HashMap<String, Object>();
  ...
  private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
    in.defaultReadObject();     
    myHash = new HashMap<String, Object>();
  }
}

Это должно решить вас.

Ответ 3

Вы можете реализовать свой собственный метод readIn и явно создать новый Map<T>, как описано в Java Serializable documentation. Эта статья должна описывать, как делать то, что вы ищете; в разделе Настроить протокол по умолчанию.