.class == getClass()测试失败

Anu*_*Dey 4 java reflection java.lang.class

这是我编写的一个小代码,用于在运行时检查(它是否称为反射API?不确定)类,但是我没有得到预期的结果.这是代码:

public class Outer {
    public Outer(){
        System.out.println("Outer Class");
    }
    public class Inner {
        public Inner(){         
            System.out.println("Inner Class");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这里还有我编写的用于运行代码并测试它的主要功能......

public class ClassTest {

    public static void main(String[] args) {

        Outer outObj = new Outer();
        Outer.Inner inObj = outObj.new Inner();

        // Using Reflection
        Class objTyp = inObj.getClass();
        System.out.println(objTyp.getName());

        //Testing Reflection
        if(objTyp.getClass() == Outer.Inner.class){
            System.out.println("Match classes!");
        }else{
            System.out.println("Mismatch classes!");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

测试失败,出现以下错误:

if(objTyp.getClass()== Outer.Inner.class){^其中CAP#1是一个新的类型变量:CAP#1从捕获中扩展Class?扩展了Class 1错误

请帮我纠正代码.我错过了什么?谢谢.

Arn*_*lle 7

您比较Outer.Inner.classobjTyp.getClass()代替objTyp.

  • objTyp是类型的Class<Outer.Inner>.
  • objTyp.getClass()是类型的Class<Class<Outer.Inner>>.
  • Outer.Inner.class是类的文字Class<Outer.Inner>.

因此,objTyp.getClass()没有机会平等Outer.Inner.class.

    Outer outObj = new Outer();
    Outer.Inner inObj = outObj.new Inner();

    // Using Reflection
    Class objTyp = inObj.getClass();
    System.out.println(objTyp.getName());

    //  >>>>> objTyp is already inObj.getClass() <<<<<<
    if(objTyp.getClass() == Outer.Inner.class){
        System.out.println("Match classes!");
    }else{
        System.out.println("Mismatch classes!");
    }
Run Code Online (Sandbox Code Playgroud)