java - .class == getClass() 测试失败

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

这也是我编写的用于运行代码并对其进行测试的主要函数...

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){ ^ where CAP#1 is a fresh type-variable: CAP#1 extends Class from capture of ? extends Class 1 error

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

最佳答案

您正在比较 Outer.Inner.classobjTyp.getClass()而不是 objTyp .

  • objTyp类型为 Class<Outer.Inner> .
  • objTyp.getClass()类型为 Class<Class<Outer.Inner>> .
  • Outer.Inner.classClass<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!");
    }

关于java - .class == getClass() 测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18207360/

相关文章:

java - Jenkins -- 使用 cli 构建作业导致 java.lang.NullPointerException

java - PowerMock的mockStatic()覆盖X.class.y()方法

java - 过滤可轮询 channel

java - JAX RS 获取对象列表

java - 如何从 SoapFaultClientException 获取整个 xml 响应

java - java.lang.reflect.Proxy 实例是否经过特殊处理以进行终结?

C# - GetValue - 对象与目标类型不匹配

c# - 动态抛出 "Ambiguous Match Found"时为 "System.ArgumentException"

java.lang.NullPointerException 表单用户输入

java - 更改/删除默认标记/关注元素