Łączenie typów surowych i metod ogólnych

Oto pytanie: ta pierwsza lista kodów kompiluje się dobrze (JDK 1.6 | JDK 1.7):

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

Jeśli jednak zadeklarujęList referencja jako typ surowy:

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

Dostaję błąd kompilatora mówiącegoString[] jest wymagane, aleObject[] został znaleziony.

Oznacza to, że mój kompilator interpretuje metodę ogólną jako zwracającąObject[] pomimo otrzymaniaString[] jako jego argument.

Sprawdziłem dwukrotnietoArray(myArray) podpis metody:

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

Dlatego jest to metoda sparametryzowana, której parametr typu<T> nie ma żadnego związku z listą (tj.<E>).

Nie mam pojęcia, jak użycie surowego typu wpływa tutaj na ocenę sparametryzowanych metod przy użyciu niezależnych parametrów typu.

Czy ktoś ma jakiś pomysł, dlaczego ten kod się nie kompiluje?Czy ktoś zna jakieś odniesienie, gdzie to zachowanie jest udokumentowane?

questionAnswers(5)

yourAnswerToTheQuestion