gpt4 book ai didi

java - getClass()方法的使用

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:13:48 26 4
gpt4 key购买 nike

我正在尝试使用 getClass() 方法并具有以下代码:

class parent{}
class child extends parent{}
public class test {
public static void main(String[] args){
child b= new child();
System.out.println(b.getClass()==parent.class);
}
}

我得到一个编译错误 Incompatible operand types Class<capture#1-of ? extends child> and Class<parent> , 如果我用 Object b= new child(); 初始化 b 就可以了.谁能告诉我它们之间有什么区别?

提前致谢。

最佳答案

自从在 Java 5 中引入泛型以来,java.lang.Class类在它所代表的类型上是通用的。这使得无需强制转换即可通过其 Class 构造对象,并启用其他有用的习语。

这就是为什么编译器会变得太聪明,看到它能够在编译时完全评估表达式:你的表达式总是 false。编译器会给出类型兼容性错误,但这是表达式为编译时常量的直接结果。

避免这种情况的一种方法是使用 java.lang.Object 作为类型。一旦这样做,编译器就无法再准确地评估 getType 的结果类型,从而避免错误。

解决此问题的另一种方法是将返回类型转换为非泛型 Class

System.out.println(((Class)b.getClass())==parent.class);

或使用非泛型类型的中间变量:

Class bClass = b.getClass();
System.out.println(bClass==parent.class);

关于java - getClass()方法的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18435719/

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