В общем, для открытого интерфейса, такого как API, возвращение интерфейса (например, List
) по конкретной реализации (например, ArrayList
) было бы лучше.
Использование a ArrayList
или LinkedList
является деталью реализации библиотеки, которая должна рассматриваться для наиболее распространенного варианта использования этой библиотеки. И, конечно, внутренне, имея private
методы передачи LinkedList
s, не обязательно будут плохими, если они предоставляют средства, облегчающие обработку.
Нет причин, по которым конкретный класс не должен использоваться в реализации, если нет веских оснований полагать, что некоторое другое List
класс будет использоваться позже. Но опять же, изменение деталей реализации не должно быть столь же болезненным, если часть, ориентированная на общественность, хорошо разработана.
Сама библиотека должна быть черным ящиком для ее потребителей, поэтому они не действительно нужно беспокоиться о том, что происходит внутри страны. Это также означает, что библиотека должна быть спроектирована так, чтобы она была разработана так, как она предназначена.