Combinando Tipos Brutos e Métodos Genéricos
Aqui está uma pergunta, esta primeira listagem de código compila muito bem (JDK 1.6 | JDK 1.7):
ArrayList<String> a = new ArrayList<String>();
String[] s = a.toArray(new String[0]);
No entanto, se eu declararList
referência como um tipo bruto:
ArrayList a = new ArrayList();
String[] s = a.toArray(new String[0]);
Eu recebo um erro do compilador dizendoString[]
é necessário, masObject[]
foi encontrado.
Isso significa que meu compilador está interpretando o método genérico como retornandoObject[]
apesar de receber umString[]
como seu argumento.
Eu verifiquei otoArray(myArray)
assinatura do método:
<T> T[] toArray(T[] a);
Portanto, é um método parametrizado cujo parâmetro de tipo<T>
não tem qualquer relação com a da Lista (ou seja,<E>
).
Eu não tenho idéia de como usar um tipo raw aqui afeta a avaliação de métodos parametrizados usando parâmetros de tipo independentes.
Alguém tem alguma idéia porque esse código não compila?Alguém conhece alguma referência onde esse comportamento é documentado?