在Java中将对象的临时成员反序列化为非null默认值

时间:2011-01-27 00:04:15

标签: java serialization

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

有没有办法确保当上一个类的对象被反序列化时,成员myHash将被设置为一个新的空Map而不是设置为null?

3 个答案:

答案 0 :(得分:31)

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>();
    }
}

答案 1 :(得分:9)

如何添加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>();
  }
}

那会让你感到厌烦。

答案 2 :(得分:3)

您可以实施自己的自定义readIn方法,并按照Java Serializable documentation中的说明明确创建新的Map<T>。那篇文章应该描述如何做你正在寻找的东西;查看标题为自定义默认协议的部分。