如何将泛型与类数组一起使用?
我想创建一个 Classes 数组,每个 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 };
但后来我得到了泛型警告:
类是原始类型。对泛型类型类的引用应参数化。
我正在尝试;我在努力!:)此外,在这一点上,即使这没有引起警告,我也会丢失我试图定义的界面的一部分。我不想只返回任意类的数组;我想返回一个类数组,这些类都是特定超类的子类!
Eclipse 有一些非常强大的工具,可以找出使用哪些参数来修复泛型声明,但在这种情况下,它会下降,就像你处理 Class 时一样。它提供的“推断泛型类型参数”过程根本不会更改代码,而是留下警告。
我能够通过使用集合来解决此问题:
List<Class<? extends SuperClass>> availableTypes = new List<Class<? extends SuperClass>>();
但是,使用数组执行此操作的正确方法是什么?