Capturando comodines en genéricos de Java
Desdeesta Tutorial de Oracle Java:
El ejemplo de WildcardError produce un error de captura cuando se compila:
public class WildcardError {
void foo(List<?> i) {
i.set(0, i.get(0));
}
}
Después de esta demostración de error, solucionan el problema utilizando un método auxiliar:
public class WildcardFixed {
void foo(List<?> i) {
fooHelper(i);
}
// Helper method created so that the wildcard can be captured
// through type inference.
private <T> void fooHelper(List<T> l) {
l.set(0, l.get(0));
}
}
Primero, dicen que el parámetro de entrada de lista (i
) es visto como unObject
:
En este ejemplo, el compilador procesa eli
parámetro de entrada como de tipo Objeto.
Porqué entoncesi.get(0)
no devuelve unObject
? Si ya fue pasado como tal?
Además, ¿cuál es el punto de usar un<?>
cuando entonces tienes que usar un método de ayuda usando<T>
. No sería mejor usar directamenteT
¿Qué se puede inferir?