创建泛型集合数组
2022-09-02 10:50:45
实际上,问题应该是
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编译器在涉及泛型时的行为。
附注:c'mon停止被触发快乐。泛型列表的答案数组没有回答我的问题。为什么编译器不能自发地执行转换?