我的示例代码 -
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
是不可变的(价值应该坚持),有没有办法做到这一点?
答案 0 :(得分:3)
通过使用赋值语句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;
}
}
答案 1 :(得分:1)
您需要深层复制对象。或者至少使用clone
方法将其复制过来。