Большинство ответов относится к мантре «кодирование интерфейса». Хотя это хороший совет, это может привести к некоторым проблемам. В частности, в случае List
пользователь объекта listObject
ничего не знал об эффективности базовой структуры данных. Например, если это экземпляр ArrayList
, то получение последнего элемента - только O(1)
, а если это LinkedList
, то это O(listObject.size)
.
Поэтому часто очень важно знать точную базовую структуру данных, которая может быть достигнута с использованием типа реализации для объявления переменной. Например, Scala's List
- это класс, который делает его структуру данных явной.
Таким образом, я бы сказал, что, как всегда, решение должно быть информированным и соответствовать дизайну вашего приложения. Если структура данных должна быть «списком», и нет требований к конкретной реализации, то для объявления используется List
. Однако, если набор алгоритмов, которые должны работать над этой структурой данных, хорошо известен, используйте конкретный класс реализации (то есть ArraysList
, LinkedList
), который обеспечил бы оптимальную производительность этих алгоритмов.
Вы можете посмотреть эту тему. http://stackoverflow.com/questions/2279030/type-list-vs-type-arraylist-in-java – dijkstra
Возможный дубликат [Что означает «программа для интерфейса»?] (Http: // stackoverflow.com/questions/383947/what-does-it-mean-to-program-to-an-interface) –