类和继承的集合

Luk*_*awa 1 java generics covariance

我希望有一个特定子类的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();

    }
}
Run Code Online (Sandbox Code Playgroud)

如何在不扰乱编译器的情况下实现上述目的?

fab*_*ian 10

使用

List<Class<? extends Parent>> classes = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

这个

List<Class<Parent>> classes = new ArrayList();
Run Code Online (Sandbox Code Playgroud)

"扰乱"编译器,因为它要求列表的元素是类型Class<Parent>.但是Child1.class是类型Class<Child1>.请注意,Class<Child1>没有延长Class<Parent>.

  • 为了改进这个答案,你还可以添加解释为什么编译器不喜欢以前的版本(关于泛型不是协变的东西). (4认同)