Tengo una interfaz A
, que clase B
implementa.Java Generics Curiosity
El siguiente método genérico funciona
public static <T, U extends T> List<T> listFactory(Collection<U> source) {
return new ArrayList<T>(source);
}
pero
public static <T> List<T> listFactory(Collection<? extends T> source) {
return new ArrayList<T>(source);
}
no (error de compilación, de coincidencia de tipos), cuando estoy dirigiendo la salida en
List<A> tester = listFactory(B.defaultCollectionFactory(3));
defaultCollectionFactory(int count)
estáticamente proporciona una colección de B
s, con un esquema de etiquetado predeterminado.
¿Alguna idea de por qué es así? Parece que el U genérico y el comodín están haciendo lo mismo.
¿cómo "no funciona"? ¿Cuál es el mensaje de error? – newacct
Parece que tiene dos respuestas correctas a continuación para saber qué es lo que está causando el problema, pero yo no tomaría su consejo literalmente. Quédese con la versión que no sea comodín, para que la persona que llama del método no tenga que solucionar esta limitación de comodines. –
@newacct: error de compilación, tipo no coincide – Carl