Здесь вопрос, этот первый список кодов компилируется просто отлично (JDK 1.6 | JDK 1.7):
ArrayList<String> a = new ArrayList<String>();
String[] s = a.toArray(new String[0]);
Однако, если я объявляю ссылку List как необработанный тип:
ArrayList a = new ArrayList();
String[] s = a.toArray(new String[0]);
Я получаю ошибку компилятора, если требуется String[], но найдено Object[].
Это означает, что мой компилятор интерпретирует общий метод как возвращающий Object[], несмотря на получение в качестве аргумента String[].
Я дважды проверял подпись метода toArray(myArray):
<T> T[] toArray(T[] a);
Следовательно, это параметризованный метод, параметр типа <T> не имеет никакого отношения к классу List (т.е. <E>).
Я понятия не имею, как использование необработанного типа влияет на оценку параметризованных методов с использованием независимых параметров типа.
- Кто-нибудь знает, почему этот код не компилируется?
- Кто-нибудь знает какую-либо ссылку, где это поведение документировано?