我想创建一个Classes数组,每个都代表我正在构建的系统中可用的类型。所有涉及的类都是公共超类的子类。所以我想做:
Class extends SuperClass>[] availableTypes = { SubClass1.class, SubClass2.class };
这给我错误:
Cannot create a generic array of Class extends SuperClass>.
我得到相同的消息,如果我尝试限定在初始化的右手边的数组的创建:
Class extends SuperClass>[] availableTypes = Class extends SuperClass>[] { SubClass1.class, SubClass2.class };
我可以得到代码编译如果我消除泛型资格:
Class[] availableTypes = { SubClass1.class, SubClass2.class };
但是后来我得到泛型警告:
类是原始类型。引用泛型类应该参数化。
我尝试着;我尝试着! :)此外,在这一点上,即使这没有引起警告,我失去了一个接口,我试图定义。我不想只返回一个任意类的数组;我想返回一个类的数组,它是特定SuperClass的所有子类!
Eclipse有一些非常强大的工具来找出什么参数用于修复泛型声明,但在这种情况下,它会下降,因为它倾向于当你处理Class。它提供的“Infer Generic Type Arguments”过程不会改变代码,留下警告。
我可以解决这个问题,使用集合代替:
List> availableTypes = new List>();
但是什么是正确的方法来做这个数组?