假设以下对象结构:
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>
任何想法为什么?我需要修理什么?
答案 0 :(得分:13)
答案 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的东西不是协变的 - 类型参数被擦除,因此编译器不知道运行时会有什么。
与班级相同。