Создание массива универсальных коллекций ⇐ JAVA

Программисты JAVA общаются здесь
Anonymous
Создание массива универсальных коллекций

Сообщение Anonymous »

Вообще-то вопрос должен быть

Код: Выделить всё

Creating an array of generic anything.
Почему компилятор не может об этом позаботиться?

Следующее будет помечено как ошибка: невозможно создать общий массив.

Код: Выделить всё

List[] dtoLists = {new ArrayList(), anExistingDtoList};
Чтобы преодолеть это, мне нужно

Код: Выделить всё

List[] dtoLists = (List[])Array.newInstance(ArrayList.class, 2);
dtoLists[0] = new ArrayList();
dtoLists[1] = anExistingDtoList;
Итак, почему компилятор не может преобразовать первый случай во второй?

Я понимаю что дженерики определяются во время компиляции, а не во время выполнения, в то время как массивы определяются во время выполнения и, следовательно, для создания массива требуется определенный тип.

Что с какими технологическими/логическими барьерами могут столкнуться разработчики компиляторов, которые помешают им реализовать это?

Является ли проблема чисто философской, касающейся ортогональности языка? Если да, то как такое поведение может нарушить ортогональность языка?

Это вопрос сложности? Объясните сложность.

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

Примечание:
перестаньте быть счастливым. Ответы «Массив общего списка»
не отвечают на мой вопрос. Почему компиляторы не могут самопроизвольно выполнить преобразование?

Подробнее здесь: https://stackoverflow.com/questions/848 ... ollections

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