Java Generics: создание экземпляров массивов с параметризованными типами: незаконно? ⇐ JAVA

Программисты JAVA общаются здесь
Anonymous
Java Generics: создание экземпляров массивов с параметризованными типами: незаконно?

Сообщение Anonymous »

Я, должно быть, запутался.

Я везде читал, что в дженериках массивы параметризованных типов недопустимы.

Пример от Анжелики Лангер:

static void test() {
Pair[] intPairArr = new Pair[10] ; // error
addElements(intPairArr);
Pair pair = intPairArr[1];
Integer i = pair.getFirst();
pair.setSecond(i);
}


Цитата Лангера (но везде, где я читал, говорится то же самое):


Компилятор запрещает создание массивов, тип компонента которых является
конкретным параметризованным типом, например Pair в нашем
примере. В предыдущей записи мы обсуждали, почему разумно
, что компилятор квалифицирует Pair[] как недопустимый.


Пока что хорошо.

Но вот в моем коде:

private MyEntry [] elements = (MyEntry[])new Object[capacity];


Я делаю именно это, он компилируется нормально (я использую eclipse), но получаю ошибку исключения приведения класса (объект не может быть приведен к MyEntry):
Мой вопрос: почему эта строка вообще компилируется?

Я думал, что эта реализация запрещена компилятором.

Что я здесь делаю неправильно/по-другому?

ОБНОВЛЕНИЕ:

На той же странице почему я могу успешно сделать:

List elements[] = (List[])new LinkedList[capacity];


и нет исключений во время выполнения?

ОБНОВЛЕНИЕ:

и нет исключений во время выполнения
?

ОБНОВЛЕНИЕ:

Везде, где я читал (упоминал Лангер, поскольку ее часто цитируют), говорится, что это объявление (массивы параметризованных типов) запрещено компилятором.
Я могу понять, что происходит после этого.

Я не могу понять, почему компилятор не сообщает об ошибке.

Я не осуждаю, я говорю везде, где я читаю, написано, что это не компилируется.

Я что-то пропустил?

ОБНОВЛЕНИЕ:

Я видел несколько комментариев, касающихся отсутствующего параметра в новой части.

Это тоже нет проблем:

List table[] = (List[])new LinkedList[capacity];


Подробнее здесь: https://stackoverflow.com/questions/921 ... es-illegal

Вернуться в «JAVA»