为什么Java不允许创建泛型数组?

2022-09-02 13:27:18

有很多关于stackoverflow的问题,这些问题来自那些试图创建一系列泛型的人,如下所示:

ArrayList<Foo>[] poo = new ArrayList<Foo>[5];

答案当然是Java规范不允许你声明泛型数组。

然而,我的问题是为什么?在java语言或java vm中,这种限制背后的技术原因是什么?这是我一直想知道的技术好奇心。


答案 1

数组被重新初始化 - 它们在运行时保留类型信息。

泛型是一种编译时构造 - 类型信息在运行时丢失。这是一个深思熟虑的决定,允许与前泛型Java字节码向后兼容。结果是无法创建泛型类型的数组,因为当 VM 想要创建数组时,它将不知道要使用哪种类型。


答案 2