Создание массива общих коллекций

На самом деле, вопрос должен быть

Creating an array of generic anything.

Почему компилятор не может позаботиться об этом?

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

List<MyDTO>[] dtoLists = {new ArrayList<MyDTO>(), anExistingDtoList};

Чтобы преодолеть это, мне нужно

List<MyDTO>[] dtoLists = (List<MyDTO>[])Array.newInstance(ArrayList.class, 2);
dtoLists[0] = new ArrayList<MyDTO>();
dtoLists[1] = anExistingDtoList;

Так почему же компилятор не может преобразовать первый случай во второй?

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

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

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

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

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

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

Ответы на вопрос(3)

Ваш ответ на вопрос