我想创建一个类的数组,每个类表示在我正在构建的系统中可用的类型。所涉及的所有类都是公共超类的子类。所以我喜欢做的事:如何将泛型与类数组一起使用?
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时往往会这样做。它提供的“推断泛型类型参数”过程根本不会改变代码,而是留下警告。
我能够用集合,而不是来解决此问题:
List<Class<? extends SuperClass>> availableTypes = new List<Class<? extends SuperClass>>();
但是,什么是与数组做到这一点的正确方法?
协方差!你说这个坏话! – 2009-04-14 22:29:33