创建具有公共基类的Java元类列表

创建具有公共基类的Java元类列表,java,java-7,Java,Java 7,我有几个从公共基类派生的类 public class BaseClass ... public class ClassA extends BaseClass ... public class ClassB extends BaseClass ... 我需要将这些类存储在列表中,在这里我可以通过它们的索引检索它们,并在运行时创建特定实例,我可以使用以下工作代码来实现这一点: List<Class> a = new ArrayList<Class>();

我有几个从公共基类派生的类

public class BaseClass ...

public class ClassA extends BaseClass ...

public class ClassB extends BaseClass ...
我需要将这些类存储在列表中,在这里我可以通过它们的索引检索它们,并在运行时创建特定实例,我可以使用以下工作代码来实现这一点:

    List<Class> a = new ArrayList<Class>();
    a.add(ClassA.class);
    a.add(ClassB.class);

    Class c = a.get(0);
    BaseClass m = (BaseClass) c.getConstructor().newInstance();
但上面的代码引发编译器错误:

Error:(135, 10) error: no suitable method found for add(Class<ClassA>)
method List.add(Class<BaseClass>) is not applicable
(actual argument Class<ClassA> cannot be converted to Class<BaseClass> by method invocation conversion)
method List.add(int,Class<BaseClass>) is not applicable
(actual and formal argument lists differ in length)
method Collection.add(Class<BaseClass>) is not applicable
(actual argument Class<ClassA> cannot be converted to Class<BaseClass> by method invocation conversion)
错误:(135,10)错误:找不到适合添加(类)的方法
方法列表。添加(类)不适用
(实际参数类不能通过方法调用转换转换为类)
方法列表。添加(int,Class)不适用
(实际参数列表和正式参数列表长度不同)
方法集合。添加(类)不适用
(实际参数类不能通过方法调用转换转换为类)
列表
表示只有确切的BaseClass.class可以用作集合的元素。根据定义,您的问题是希望插入子类:

List<Class<? extends BaseClass>> a = new ArrayList<Class<? extends BaseClass>>();

List使用由基类限定的通配符上限:

List<Class<? extends BaseClass>> a = new ArrayList<Class<? extends BaseClass>>();

列表我不确定我是否了解你;你是说这个
列表吗@ᴳᵁᴵᴰᴼ 是的,这就是答案,如果您将其添加为答案,我将接受它。完全准确地说,这意味着只有确切的类可以用作集合的元素。列表将很乐意接受ClassA。谢谢,正如承诺的那样,我已经接受了其他答案,但你得到+1
List<Class<? extends BaseClass>> a = new ArrayList<Class<? extends BaseClass>>();
List<Class<BaseClass>> a = new ArrayList<Class<BaseClass>>();