Извините, что не согласен, но я думаю, что основное правило выглядит следующим образом:
Итак, в этом случае вы хотите объявить реализацию как:
public ArrayList<String> foo() {
return new ArrayList<String>();
}
Обоснование: входной случай уже известен и объясняется всеми: используйте интерфейс , период. Тем не менее, выходной случай может выглядеть противоречивым. Вы хотите вернуть реализацию, потому что хотите, чтобы у клиента была максимальная информация о том, что получает. В этом случае больше знаний больше.
Пример 1: клиент хочет получить 5-й элемент:
list.get(4)
Пример 2: клиент хочет удалить 5-й элемент:
list.remove()
является необязательным). arrayList.remove(4)
Так что большая правда, что использование интерфейсов отлично, потому что он способствует повторному использованию, уменьшает сцепление, улучшает ремонтопригодность и делает людей счастливыми ... но только при использовании в качестве входных данных.
Итак, это правило может быть указано как:
Итак, в следующий раз, пожалуйста, верните реализацию.