我想拥有一个特定子类的Class'es集合来实现这样的目标:
public class Test {
private class Parent {}
private class Child1 extends Parent{}
private class Child2 extends Parent{}
List<Class<Parent>> classes = new ArrayList();
public Test() {
classes.add(Child1.class);
}
public static void main(String[] args) {
new Test();
}
}
如何在不破坏编译器的情况下实现上述目标?
答案 0 :(得分:10)
使用
List<Class<? extends Parent>> classes = new ArrayList<>();
这个
List<Class<Parent>> classes = new ArrayList();
&#34;冷门&#34;编译器,因为它要求列表的元素是Class<Parent>
类型。但Child1.class
的类型为Class<Child1>
。请注意,Class<Child1>
不扩展Class<Parent>
。
答案 1 :(得分:4)
将列表定义更改为List<Class<? extends Parent>>
,编译器应该感到高兴。这将定义列表以包含任何扩展Parent
的类,即Parent
和子类。
请注意List<? extends Class<Parent>>
无效,因为您无法扩展Class
,即使您的列表可能实际上是ArrayList<Class<Child1>>
,因此编译器也不会让您将元素添加到列表中。