Здесь вопрос, этот первый список кодов компилируется просто отлично (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>
).
Я понятия не имею, как использование необработанного типа влияет на оценку параметризованных методов с использованием независимых параметров типа.
- Кто-нибудь знает, почему этот код не компилируется?
- Кто-нибудь знает какую-либо ссылку, где это поведение документировано?