Ouvi o argumento de que você deve usar a interface mais genérica disponível para não ficar vinculado a uma implementação específica dessa interface. Essa lógica se aplica a interfaces como java.util.Collection ?
Prefiro ver algo como o seguinte:
List<Foo> getFoos()
ou
Set<Foo> getFoos()
ao invés de
Collection<Foo> getFoos()
No último caso, não sei com que tipo de conjunto de dados estou lidando, enquanto nos dois primeiros casos posso fazer algumas suposições sobre ordenação e exclusividade. O java.util.Collection tem uma utilidade além de ser um pai lógico para conjuntos e listas?
Se você encontrasse o código que empregava o Collection ao fazer uma revisão de código, como você determinaria se seu uso é justificado e que sugestões você faria para substituí-lo por uma interface mais específica?
Collection<List<?>>? Fale sobre horror de codificação!