Java: getClass () do tipo limitado
Eu notei algo enquanto andava por aí com genéricos. No exemplo abaixo,doStuff1
compila masdoStuff2
não faz:
public <T extends Foo> void doStuff1(T value) {
Class<? extends Foo> theClass = value.getClass();
}
public <T extends Foo> void doStuff2(T value) {
Class<? extends T> theClass = value.getClass();
}
Então, eu procurei a documentação paraObject.getClass()
e encontrei isto:
O tipo de resultado real é Classe <? estende | X |> onde | X | é o apagamento do tipo estático da expressão na qual o getClass é chamado.
Isso me deixou um pouco curioso. Por que égetClass()
projetado dessa maneira? Eu posso entender a conversão de tipos para suas classes brutas, se aplicável, mas não vejo nenhuma razão óbvia para que eles tenham que fazer isso também matarT
. Existe uma razão específica pela qual ele também se livra disso, ou é apenas uma abordagem geral "vamos nos livrar de tudo porque é mais fácil, quem precisaria disso de qualquer maneira"?