Открыть список
Как стать автором
Обновить

Комментарии 3

Иммутабельный вариант в статье всё равно не иммутабелен. Значениями в мапе могут быть вложенные мапы, которые можно изменить после этого конструктора.

Пояснение
public AlmostMutableClass(String field, Map<String, String> fieldMap) {
  this.field = field;      
  Map<String, String> deepCopy = new HashMap<String, String>();
  for(String key : fieldMap.keySet()) {
    deepCopy.put(key, fieldMap.get(key));
  }
  this.fieldMap = deepCopy;
}

Здесь «deepCopy» на самом деле является shallow copy. Поэтому если вызывающий код сохранил ссылку на одно из значений в мапе, которое является вложенной мапой, то значение в этой вложенной мапе потом можно изменить.

Также непонятно, зачем создавать копию в геттере, когда поле может быть иммутабельной мапой (завёрнуто).
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Информация

Дата основания
Местоположение
Россия
Сайт
otus.ru
Численность
51–100 человек
Дата регистрации
Представитель
OTUS

Блог на Хабре