Я слышал аргумент, что вы должны использовать самый общий доступный интерфейс, чтобы вы не были привязаны к конкретной реализации этого интерфейса. Применяется ли эта логика к интерфейсам, таким как java.util.Collection ?
Я бы предпочел увидеть что-то вроде следующего:
List<Foo> getFoos()
или же
Set<Foo> getFoos()
вместо
Collection<Foo> getFoos()
В последнем случае я не знаю, с каким набором данных я имею дело, тогда как в первых двух случаях я могу сделать некоторые предположения о порядке и уникальности. Есть ли полезность java.util.Collection помимо того, что он является логическим родителем для наборов и списков?
Если вы сталкивались с кодом, который использовал Collection при выполнении обзора кода, как бы вы определили, является ли его использование оправданным, и какие предложения вы бы предложили для его замены более конкретным интерфейсом?
Collection<List<?>>
? Разговор о кодировании ужасов!