java - Java中getter和list修改的结合

标签 java methods arraylist getter

今天我处理了一个让我很困惑的 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/

相关文章:

Java 菱形运算符无法编译

c++结构和方法,未正确返回

java - 在方法中处理不同的实例变量

c++ - 对象方法的真实地址

java - 为什么我的代码不能正确打印类(class)

java - 如何将 Arraylist 的最后 3 个元素添加到不同的 Arraylist?

java - 使用 JNI 在 Java 调用之间将 native 对象保存在内存中

java - Spring boot elasticsearch @Field name 不起作用

java - new IndexWriter() 处的 LockObtainFailedException

java - 将 .txt 文档中的数据添加到数组