小小的打ic使我想到了一个基本问题。我打算在以下情况下检查班级对等情况(出于学术上的好奇心-请不要引导我前往instanceofisinstance):

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>

有几种方法可以消除该错误。例如,您可以声明thisobjObject类型(甚至是staticParent类型)。

但是请注意,测试将始终失败。

07-24 15:10