gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 01:53:30 24 4
gpt4 key购买 nike

这是我编写的一小段代码,用于在运行时检查(是否称为反射 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com