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