此代码工作原理:
public void updateCollection(Collection col) {
this.objectCollection.clear();
this.objectCollection.addAll(col);
}
但这会引入问题:
public void updateCollection(Collection col) {
this.objectCollection=new ArrayList(col);
}
我怀疑你的第一种方法的这种变化会引起同样的问题:
public void updateCollection(Collection col) {
this.objectCollection = new ArrayList();
this.objectCollection.clear();
this.objectCollection.addAll(col);
}
为什么?显然你在另一个使用objectCollection的另一个引用.在代码的某个地方,另一个对象就是说(例如):
myCopyOfObjectCollection = theOtherObject.objectCollection;
如果你使用的是一个getter,那不会改变底层的行为 – 你还在继续提供一个参考.
所以,如果在初始作业中,说收集包含{1,2,3},那么你从…开始:
> this.objectCollection:{1,2,3}
> that.copyOfObjectCollection:{1,2,3}
当您将一个新的ArrayList分配给this.objectCollection,并使用{4,5,6}进行填充时,可以得到以下结果:
> this.objectCollection:{4,5,6}
> that.copyOfObjectCollection:{1,2,3}
“那个”仍然指向原来的ArrayList.