4

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

public class Outer {
    public Outer(){
        System.out.println("Outer Class");
    }
    public class Inner {
        public Inner(){         
            System.out.println("Inner Class");
        }
    }
}

这也是我为运行代码和测试它而编写的主要函数......

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!");
        }
    }
}

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

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

请帮我更正代码。我错过了什么?谢谢。

4

1 回答 1

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!");
    }
于 2013-08-13T11:07:28.483 回答