试图创建这样一组泛型的人对于堆栈溢出有很多疑问:
ArrayList<Foo>[] poo = new ArrayList<Foo>[5];当然,答案是Java规范不允许您声明一个泛型数组。
然而,我的问题是为什么是?在java语言或java中,这种限制背后的技术原因是什么?这是我一直想知道的技术上的好奇心。
发布于 2010-06-07 20:16:00
数组被具体化--它们在运行时保留类型信息。
泛型是一个编译时构造--类型信息在运行时丢失。这是一个故意允许向后兼容前泛型Java字节码的决定。其结果是您无法创建泛型类型的数组,因为当VM想要创建数组时,它将不知道使用哪种类型。
发布于 2010-06-07 20:18:12
见有效Java,项目25。
发布于 2010-06-07 20:34:45
这是我写的一篇旧博文,我在这里解释了这个问题:Java泛型怪癖
请参阅Angelika的Java中的如何一般地创建对象和数组?以获得解决方法(您可以使用反射来完成它)。FAQ包含了您想知道的关于Java泛型的所有内容。
https://stackoverflow.com/questions/2992786
复制相似问题