Java中的类对象类型参数化

时间:2009-06-23 21:06:32

标签: java generics reflection

假设以下对象结构:

class Super {}

class SubA extends Super {}
class SubB extends Super {}

我希望能够拥有一个变量来保存我的子类的类对象。我觉得应该这样做:

Class<Super> classObj;

然后,我想能够做到这样的事情:

classObj = SubA.class;

或:

classObj = SubB.class;

但这不起作用。我收到以下错误:

Type mismatch: cannot convert from Class<SubA> to Class<Super>

任何想法为什么?我需要修理什么?

3 个答案:

答案 0 :(得分:13)

您需要有界通配符

Class<? extends Super> classObj;

请参阅Java教程中的wildcards课程。

答案 1 :(得分:1)

正如mmyers指出你可以使用通配符。

作为替代方案,您可以让类实现一个公共接口,然后通过该接口访问它们。

答案 2 :(得分:1)

试试这个(编译失败):

public class ListCopy {
  public static void main(String[] args) {
    List<String> stringList = new ArrayList<String>();
    List<Object> objectList = stringList;
  }
}

即使String扩展了Object,也无法编译。 Java的东西不是协变的 - 类型参数被擦除,因此编译器不知道运行时会有什么。

与班级相同。