Estoy leyendo "Genéricos en el lenguaje de programación Java" por Gilad Bracha y estoy confundido acerca de un estilo de declaración. El siguiente código se encuentra en la página 8:¿Alguien puede explicar la declaración de estos métodos genéricos de Java?
interface Collection<E>
{
public boolean containsAll(Collection<?> c);
public boolean addAll(Collection<? extends E> c);
}
interface Collection<E>
{
public <T> boolean containsAll(Collection<T> c);
public <T extends E> boolean addAll(Collection<T> c);
// hey, type variables can have bounds too!
}
Mi punto de confusión proviene de la segunda declaración. No me queda claro cuál es el propósito de la declaración <T>
sirve en la siguiente línea:
public <T> boolean containsAll(Collection<T> c);
El método ya tiene un tipo (booleano) asociado a él.
¿Por qué usaría el <T>
y qué le dice al compilador?
Creo que mi pregunta debe ser un poco más específica.
Por qué escribirías:
public <T> boolean containsAll(Collection<T> c);
vs
public boolean containsAll(Collection<T> c);
No es claro para mí, cuál es el propósito de <T>
es, en la primera declaración de containsAll.
Si comprende el PECS, entonces comprenderá esto. Consulte aquí http://stackoverflow.com/questions/4535930/regarding-pecs-java-generics –
En Oracle/Sun JDK 6, se usa el primer ejemplo, por lo que no sé si usaría el segundo tampoco. –
¿Y por qué es mejor que 'public boolean containsAll (Collection > c);'? –