我有一个列表,如下所示:
List<MyObject> list = complexObject.getMyObjectList();
for(final MyObject obj in list){
// set something in obj. .............(1)
}
我调试了上面的代码,发现修改后的 MyObject 没有反射(reflect)在复杂对象中,除非我执行以下操作..
complexObject.setList(list);
我认为Java通过“引用传递”来完成所有事情。我错过了什么吗? ?
最佳答案
getMyObjectList()
函数的实现可能会在返回列表之前对其进行深层复制:
protected List<MyObject> objects = new ArrayList<MyObject>();
// ...
public List<MyObject> getMyObjectList() {
List<MyObject> os = new ArrayList<MyObject>();
for (Object o: this.objects) {
os.add(o.clone());
}
return os;
}
这是避免意外改变列表和/或列表成员的常见习惯用法。
关于java - Java "Pass by reference"是否不适用于集合中存在的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8808112/