这是我编写的一小段代码,用于在运行时检查(是否称为反射 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.class
与 objTyp.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!");
}
关于java - .class == getClass() 测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18207360/