2016-09-06 5 views
3

Java не позволяет создавать массив коллекций, показывает ошибку компиляции cannot create a generic arrayСоздание массива из коллекций

ArrayList<String>[] list = new ArrayList<String>[2]; 

, но я могу создать общую коллекцию, как этот

ArrayList<?>[] list = new ArrayList<?>[2]; 

Почему нет никакого предупреждения компилятора в приведенный выше случай

ответ

1

В Java вы не можете создать общий массив. Я думаю, причина, по которой это недопустимо, состоит в том, что массивы - это reified, что означает, что информация о типе известна во время выполнения и выполняется ими. Напротив, информация о типе от генериков составляет erased во время выполнения.

Из вышесказанного, разрешено иметь что-то вроде этого T[] array = new E[size]; где Е является подтипом Т.

При использовании дженериков вы не позволили сделать что-то вроде этого: List<T> list = new ArrayList<E>(); где E подтипом от T.

Разрешен только разрешенный тип параметра с массивами unbound wildcard ?, поскольку это означает, что любой тип принят.