【问题标题】:Why cannot I change a collection returned by getter?为什么我不能更改 getter 返回的集合?
【发布时间】:2011-02-25 16:12:22
【问题描述】:

我有一个带有 getter 的类,它返回它的私有字段 List。

Class MyClass {
  private List<String> myList;

  public List<String> getMyList(){
    return myList;
  }
}

但 getter 方法的调用者无法在该 List 中添加或删除元素。

MyClass instance = new MyClass();
List<String> hisList = instance.getMyList();
hisList.add("new element");

抛出了 UnsupportedOperationException。

我知道 getter 返回对该列表的引用,但为什么该列表在调用方是只读的?注意我没有在 getter 中返回 Collections.unmodifiableList()。

更新:

抱歉,我通过 Arrays.asList 创建了一个固定大小的列表,这就是为什么 ;)

【问题讨论】:

  • 一切看起来都正确...是否缺少代码?我没有看到列表初始化任何地方......
  • 我们没有回答您的问题所需的代码。您还没有向我们展示 myList 是如何被实例化的。如果我运行你提供给我们的代码,我会得到一个 NullPointerException。
  • 初始化代码和堆栈跟踪的前几行。

标签: java getter-setter


【解决方案1】:

不,您没有在getter 中调用unmodifiableList(),但列表可能已经无法修改,正如myList 所引用的那样。

如果您能提供一个简短但完整的示例(例如填充myList :) 的示例,将会有所帮助。

【讨论】:

  • 如何实例化列表也会很有趣
  • 也可能是Arrays.asList(它给出了可变但不是“结构上”可变的List)。
【解决方案2】:

您可能正在创建一个不可修改或常量列表,如下所示:

myList = Arrays.asList("a", "b", ...);  // returns a fixed-size list

只是猜测,没有看到创建列表的代码...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-04
    • 2021-08-12
    • 2020-06-19
    • 2012-12-04
    • 2018-06-21
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多