为什么我不能更改getter返回的集合?

时间:2011-02-25 16:12:22

标签: java getter-setter

我有一个带有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创建了一个修复大小的列表,这就是为什么;)

2 个答案:

答案 0 :(得分:4)

不,您尚未在unmodifiableList()中调用getter,但该列表已经不可修改为myList引用。

如果你能提供一个简短但完整的例子(例如填充myList的那个例子)会有所帮助:)

答案 1 :(得分:4)

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

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

只是猜测而没有看到创建List的代码......