He escuchado el argumento de que debe usar la interfaz más genérica disponible para que no esté vinculado a una implementación particular de esa interfaz. ¿Se aplica esta lógica a interfaces como java.util.Collection ?
Preferiría ver algo como lo siguiente:
List<Foo> getFoos()
o
Set<Foo> getFoos()
en vez de
Collection<Foo> getFoos()
En el último caso, no sé con qué tipo de conjunto de datos estoy tratando, mientras que en los primeros dos casos puedo hacer algunas suposiciones sobre el orden y la unicidad. ¿Tiene java.util.Collection una utilidad fuera de ser un padre lógico tanto para conjuntos como para listas?
Si se encuentra con un código que empleó Collection cuando realiza una revisión de código, ¿cómo determinaría si su uso está justificado y qué sugerencias haría para su reemplazo por una interfaz más específica?
Collection<List<?>>
? ¡Habla sobre codificar el horror!