неизменность класса, когда переменная экземпляра представлена ​​в виде массива - PullRequest
5 голосов
/ 25 января 2012

У меня есть класс, который является неизменным

Предположим, у меня есть метод получения для переменной-члена типа ArrayList.В том случае, когда я получаю ссылку на эту переменную, я могу добавить или удалить элемент из нее.В этом случае неизменность, кажется, нарушается.

Кто-нибудь может объяснить эту концепцию в деталях?

Ответы [ 3 ]

3 голосов
/ 25 января 2012

Вы действительно правы.Нарушается неизменность.

Чтобы сделать класс неизменным, необходимо убедиться, что все его методы получения возвращают безопасные копии любого класса, состояние которого могло бы измениться.

3 голосов
/ 25 января 2012

Не следует указывать переменную типа ArrayList. Укажите только List и убедитесь, что получатель выполняет одно из следующих действий:

  1. возвращает копию вашего списка
  2. или возвращает неизменяемый список

или оба.

0 голосов
/ 25 января 2012

если вы создадите новый экземпляр этого измененного объекта типа X, тогда экземпляр X будет считаться неизменным.Это легче понять, если вы рассмотрите свой ArrayList.У вас есть методы, чтобы изменить этот список.Каждый изменяющий метод создает копию этого списка и добавляет / удаляет / обновляет новую копию и возвращает обратно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...