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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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