Каковы соображения использования Iterable<T>
vs. Collection<T>
в Java?
Например, рассмотрим реализацию типа, который в первую очередь связан с содержимым набора Foo
s и некоторых связанных метаданных. Конструктор этого типа допускает однократную инициализацию списка объектов. (Метаданные могут быть установлены позже.) Какой тип должен принять этот конструктор? Iterable<Foo>
или Collection<Foo>
?
Каковы соображения для этого решения?
Следуя шаблону, заданному типами библиотек, такими как ArrayList
(который может быть инициализирован из любого Collection
, но не Iterable
), я мог бы использовать Collection<Foo>
.
Но почему бы не принять Iterable<Foo>
, учитывая, что этого достаточно для нужд инициализации? Зачем требовать от потребителя более высокий уровень функциональности (Collection
), чем это необходимо (Iterable
)?