Допустим, я пишу метод, который должен возвращать Map . Например:
public Map<String, Integer> foo() {
return new HashMap<String, Integer>();
}
Поразмыслив над этим некоторое время, я решил, что нет причин изменять эту карту после ее создания. Таким образом, я хотел бы вернуть ImmutableMap .
public Map<String, Integer> foo() {
return ImmutableMap.of();
}
Следует ли мне оставить тип возвращаемого значения как общую карту или указать, что я возвращаю ImmutableMap?
С одной стороны, именно для этого были созданы интерфейсы; чтобы скрыть детали реализации.
С другой стороны, если я оставлю это так, другие разработчики могут упустить тот факт, что этот объект неизменяем. Таким образом, я не достигну главной цели неизменяемых объектов; чтобы сделать код более понятным за счет минимизации количества объектов, которые могут изменяться. Хуже того, через некоторое время кто-то может попытаться изменить этот объект, и это приведет к ошибке выполнения (компилятор не предупредит об этом).