Скажімо, я пишу метод, який повинен повернути Map . Наприклад:
public Map<String, Integer> foo() {
return new HashMap<String, Integer>();
}
Подумавши про це деякий час, я вирішив, що немає жодних причин змінювати цю Карту після її створення. Таким чином, я хотів би повернути ImmutableMap .
public Map<String, Integer> foo() {
return ImmutableMap.of();
}
Чи повинен я залишити тип повернення як загальну карту, чи слід вказати, що я повертаю ImmutableMap?
З одного боку, саме для цього були створені інтерфейси; щоб приховати деталі реалізації.
З іншого боку, якщо я залишу це так, інші розробники можуть пропустити той факт, що цей об’єкт незмінний. Таким чином, я не досягну основної мети незмінних об'єктів; щоб зробити код більш зрозумілим, мінімізуючи кількість об’єктів, які можуть змінюватися. Навіть найгірше, через деякий час хтось може спробувати змінити цей об’єкт, і це призведе до помилки виконання (компілятор про це не попередить).