Почему я не могу изменить коллекцию, возвращенную получателем? - PullRequest
0 голосов
/ 25 февраля 2011

У меня есть класс с геттером, который возвращает его приватное поле List.

Class MyClass {
  private List<String> myList;

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

Но вызывающий метод getter не может добавлять или удалять элементы из этого списка.

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

Исключение UnsupportedOperationException.

Я знаю, что метод получения возвращаетссылка на этот список, но почему этот список только для чтения на стороне вызывающего абонента?Примечание. Я не возвращал Collections.unmodifiableList () в получателе.

ОБНОВЛЕНИЕ:

Извините, я создал список фиксированного размера с помощью Arrays.asList, вот почему;)

Ответы [ 2 ]

4 голосов
/ 25 февраля 2011

Вы, вероятно, создаете неизменяемый или постоянный список, как в:

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

только догадки, не видя код, который создает список ...

4 голосов
/ 25 февраля 2011

Нет, вы не набрали unmodifiableList() в getter, но список может уже быть неизменным, на что ссылается myList.

Это поможетможет привести короткий, но полный пример (например, тот, который заполняет myList:)

...