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