Java不允许通用数组。Java Generics
FAQ中的更多信息。
要回答您的问题,只需使用List(可能是ArrayList)而不是数组。
可以在Java理论和实践中找到更多解释:泛型陷阱:
泛型不是协变的
尽管您可能会认为将集合视为数组的抽象很有帮助,但它们具有一些集合没有的特殊属性。Java语言中的数组是协变的-
这意味着,如果Integer扩展Number(它可以这样做),则不仅是IntegerNumber,而且aInteger[]也是aNumber[],您可以自由传递或分配Integer[]aNumber[],对于。(更正式,如果Number是的超类型Integer,则Number[]是一个超类型Integer[]。)你可能会认为,同样是通用的类型以及真正的-这List<Number>
是一个超List<Integer>,并且您可以通过一个List<Integer>
其中List<Number>的预期。不幸的是,它不能那样工作。事实证明,这样做有一个很好的理由:这样做会破坏安全性泛型应该提供的类型。假设您可以将分配
List<Integer>给List<Number>。然后,以下代码将使您可以将非的内容Integer放入List<Integer>:List<Integer> li = new ArrayList<Integer>();List<Number> ln = li; // illegalln.add(new Float(3.1415));因为ln是a
List<Number>,所以添加aFloat似乎是完全合法的。但是,如果ln用li别名,那么它将破坏li定义中隐含的类型安全保证-它是整数列表,这就是为什么泛型不能协变的原因。



