Ben*_*key 19 java arrays generics
尝试创建泛型数组的人有很多关于stackoverflow的问题,如下所示:
ArrayList<Foo>[] poo = new ArrayList<Foo>[5];
Run Code Online (Sandbox Code Playgroud)
答案当然是Java规范不允许您声明泛型数组.
我的问题是为什么?在java语言或java vm中,这种限制背后的技术原因是什么?这是我一直想知道的技术好奇心.
dan*_*ben 13
数组是有效的 - 它们在运行时保留类型信息.
泛型是一个编译时构造 - 类型信息在运行时丢失.这是一个故意的决定,允许向后兼容pre-generics Java字节码.结果是您无法创建泛型类型的数组,因为在VM想要创建数组时,它将不知道要使用的类型.