Capturando curingas em genéricos Java
Deisto Tutorial do Oracle Java:
O exemplo WildcardError produz um erro de captura quando compilado:
public class WildcardError {
void foo(List<?> i) {
i.set(0, i.get(0));
}
}
Após essa demonstração de erro, eles corrigem o problema usando um 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));
}
}
Primeiro, eles dizem que o parâmetro de entrada da lista (i
) é visto como umObject
:
Neste exemplo, o compilador processa oi
parâmetro de entrada como sendo do tipo Object.
Porquê entãoi.get(0)
não retorna umObject
? se já foi passado como tal?
Além disso, qual é o ponto de usar um<?>
quando então você tem que usar um método auxiliar usando<T>
. Não seria melhor usar diretamenteT
o que pode ser inferido?