小小的打ic使我想到了一个基本问题。我打算在以下情况下检查班级对等情况(出于学术上的好奇心-请不要引导我前往instanceof
或isinstance
):
public class staticChild extends staticParent{
....
public static void main(String[] args){
staticChild thisobj=new staticChild();
System.out.println(thisobj.getClass()==staticParent.class);
}
}
这给出了编译错误:
error: incomparable types: Class<CAP#1> and Class<staticParent>
System.out.println(thisobj.getClass()==staticParent.class);
where CAP#1 is a fresh type-variable: CAP#1 extends staticChild from capture of ? extends staticChild
这是什么意思?
type和class之间有什么区别(特定于此上下文-staticchild的类型和类是什么)?
我如何摆脱编译错误?
最佳答案
由于thisobj
被声明为staticChild
类型,因此表达式:
thisobj.getClass()
返回类型为
Class<? extends staticChild>
的对象。您试图将其与Class<staticParent>
类型的对象进行比较,但是编译器无法匹配泛型类型参数。它知道staticParent
无法扩展staticChild
,因此在?
中没有任何内容可以分配给Class<? extends staticChild>
。有几种方法可以消除该错误。例如,您可以声明
thisobj
为Object
类型(甚至是staticParent
类型)。但是请注意,测试将始终失败。