¿Cuáles son las consideraciones de usar Iterable<T>
frente a Collection<T>
en Java?¿Cuándo debería aceptar un parámetro de Iterable <T> frente a Collection <T> en Java?
Por ejemplo, considere la implementación de un tipo que se ocupa principalmente de contener una colección de Foo
s, y algunos metadatos asociados. El constructor de este tipo permite la inicialización por única vez de la lista de objetos. (Los metadatos se pueden configurar más adelante.) ¿Qué tipo debe aceptar este constructor? Iterable<Foo>
, o Collection<Foo>
?
¿Cuáles son las consideraciones para esta decisión?
Siguiendo el patrón establecido por tipos de biblioteca tales como ArrayList
(que puede ser inicializado desde cualquier Collection
, pero no un Iterable
) me llevaría a utilizar Collection<Foo>
.
¿Pero por qué no aceptar Iterable<Foo>
, dado que esto es suficiente para las necesidades de inicialización? ¿Por qué exigir un nivel más alto de funcionalidad (Collection
) del consumidor, que lo estrictamente necesario (Iterable
)?
Hay un gran artículo [aquí] [1] sobre esto. [1]: http://www.artima.com/weblogs/viewpost.jsp?thread=119193 – amischiefr