我的示例代码-

private final DataObj dataObj = getDataObjs();

private final DataObj dataObj1 = new DataObjImpl();
dataObj1 = dataObj; //I need the value of dataObj1 to be the same even if the value of dataObj is modified anywhere further down in a class.


我的问题是,如果正在修改对象dataObj的值,那么第二个对象dataObj1的值也会被修改,但是我需要第二个对象dataObj1是不可变的(值应保持不变),是否存在做到这一点的方法?

最佳答案

通过使用赋值语句dataObj1 = dataObj;dataObj1引用与dataObj完全相同的对象。解决方案是分配dataObj引用的对象的副本。一种方法是通过复制构造函数,例如:

dataObj1 = new DataObjImpl(dataObj);


下面是一个示例:

class DataObjImpl {

   private Object data;

   public Object getData() {
      return data;
   }

   public void setData(Object data) {
      this.data = data;
   }

   // copy constructor
   public DataObjImpl(DataObjImpl obj) {
      this.data = obj.data;
   }
}

10-07 16:19