Иногда да.Если вы на самом деле нуждаетесь в методе, который объявлен в ArrayList<T>
, но не в List<T>
, тогда, конечно, продолжайте.
Однако обратное более гибко - если вы не нужны какие-либо методы, объявленные в ArrayList<T>
, тогда ваш код может выразить это, объявив вместо этого переменную типа List<T>
.Это говорит: «Мне просто нужен список. Я случайно выбираю ArrayList<T>
, но только потому, что его поведение меня устраивает ... не потому, что мне нужны какие-либо дополнительные функции, которые он предоставляет».
Это полезно знатьесли позже кто-то задается вопросом, могут ли они заменить другую реализацию, например.Это также ограничивает то, сколько читатель должен думать о ... чем более общий тип переменной, тем меньше можно с ней делать - тем меньше нужно думать об этом.
Например,если я вижу переменную типа Iterable<T>
, я знаю, что с ней мало что можно сделать позже: в основном она будет использоваться для итерации, и все.Мне не нужно беспокоиться о том, попытается ли какой-либо более поздний код добавить значение в коллекцию или получить к нему доступ по индексу и т. Д.
Это относительно неважно для локальных переменных, но в большей степени это касается переменных экземпляра и, в частности, параметров: чем менее конкретны вы задаете параметры, тем больше гибкости у вызывающей стороны в отношении того, какие аргументы они передадут.