Собственно, вопрос должен быть
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;
Итак, почему компилятор не может преобразовать первый случай во второй случай?
Я понимаю, что generics являются определяющими, а не определяемыми временем выполнения, а массивы задаются временем выполнения и поэтому нуждаются в определенном типе для создания массива.
Каковы будут конструкторы компиляторов технологического/логического барьера, которые помешали бы им реализовать это?
Является ли проблема чисто философской, касающейся ортогональности языка? Если да, то как такое поведение нарушает ортогональность языка?
Это вопрос сложности? Объясните сложность.
Я надеюсь, что ответы на мой вопрос помогут мне лучше понять поведение java-компилятора, когда речь идет о дженериках.
Боковое примечание: c'mon перестанет быть счастливым. Ответы Массив общего списка не отвечайте на мой вопрос. Почему компиляторы не могут самопроизвольно выполнять преобразование?