今天我处理了一个让我很困惑的 Java 问题。 我有以下代码:
List<ObjectXY> someList = obj.getListOfObjectsXY(); // getter returns 2 elements
someList.add(new ObjectXY());
obj.getListOfObjectsXY(); // getter now returns 3 elements
当我向列表中添加一个元素时,getter 会被某种覆盖。这是因为 someList
在这种情况下就像对 getter 结果的引用吗?或者还有什么原因导致这种效果?
我通过使用另一个列表用下面的代码解决了这个问题:
List<ObjectXY> someList = obj.getListOfObjectsXY(); // result: 2 elements
List<ObjectXY> someOtherList = new ArrayList<ObjectXY>();
someOtherList.addAll(someList);
someOtherList.add(new ObjectXY());
obj.getListOfObjectsXY(); // result: 2 elements
但我仍然有些困惑,因为我没想到 Java 会这样。 任何人都可以向我解释我做错了什么以及为什么会这样吗?
提前致谢!
最佳答案
返回的结果确实只是对您在内部使用的同一对象的引用的副本。指望调用者不修改对象很容易出错。
一个解决方案是返回对包装列表的不可修改列表的引用。请参阅 Collections.unmodifiableList()
。 getter 调用者将无法修改您的列表。
关于java - Java中getter和list修改的结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18290370/