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?

questionAnswers(5)

yourAnswerToTheQuestion