Combinando tipos crudos y métodos genéricos

Aquí hay una pregunta, esta primera lista de códigos compila bien (JDK 1.6 | JDK 1.7):

ArrayList<String> a = new ArrayList<String>();
String[] s = a.toArray(new String[0]);

Sin embargo, si declaro elList referencia como un tipo en bruto:

ArrayList a = new ArrayList();
String[] s = a.toArray(new String[0]);

Me sale un error del compilador diciendo que elString[] se requiere peroObject[] fue encontrado.

Esto significa que mi compilador está interpretando el método genérico como retornandoObject[] a pesar de recibir unString[] como su argumento.

Revisé el dobletoArray(myArray) método de firma:

<T> T[] toArray(T[] a);

Por lo tanto es un método parametrizado cuyo tipo de parámetro.<T> no tiene relación alguna con la de la Lista (es decir,<E>).

No tengo idea de cómo el uso de un tipo en bruto aquí afecta la evaluación de métodos parametrizados usando parámetros de tipo independiente.

¿Alguien tiene alguna idea de por qué este código no se compila?¿Alguien sabe alguna referencia donde este comportamiento está documentado?

Respuestas a la pregunta(5)

Su respuesta a la pregunta