Я, должно быть, запутался.
Я везде читал, что в дженериках массивы параметризованных типов недопустимы.
Пример от Анжелики Лангер:
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 Generics: создание экземпляров массивов с параметризованными типами: незаконно? ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Навигация с одного экрана на другой с параметризованными сериализуемыми классами данных
Anonymous » » в форуме Android - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Внутренняя ошибка (java.nio.file.invalidpathexception): незаконно char > в индексе 34
Anonymous » » в форуме JAVA - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-