gpt4 book ai didi

java - 为什么 Class.getClass() 可以不同于 Class.cast() 返回类型?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:08:15 28 4
gpt4 key购买 nike

我希望你能在这件事上帮助我。

我一直在寻找这个问题的答案,但我能找到的都与泛型类型的使用或关于反射的一般说明有关。

假设我们有一个父类和一个扩展该父类的子类。所以,请看下面:

Parent v = new Child();

如果我创建 v.getClass(),它会返回 Child。但是,如果我创建 v.getClass().cast(),它会返回类型为 Parent 的对象。

有人知道为什么会这样吗?我也看了看Java API文档,找不到原因...

感谢您的任何想法。

最佳答案

对象的运行时类型与变量或表达式的编译时类型之间存在重要区别。表达式的编译时类型只能根据其组件的编译时类型来确定。作为这些表达式的值的对象的运行时类型可以根据表达式参数的运行时类型来确定,只要它们与编译时类型兼容。

为了说明这一点,在您的特定代码示例中:

  • 变量v具有编译时类型Parent ,但分配给它的值的运行时类型将为Child .
  • 表达式v.getClass()将具有编译时类型Class<? extends Parent> (表示 Parent 类型或其子类之一的类对象。)。它在运行时 的值将为 Child.class这是类型 Class<Child> .
  • 表达式v.getClass().cast(obj)将具有编译时类型Parent .它的运行时类型将是obj 的运行时类型,因为它的运行时值实际上是 obj本身。 (也就是说,如果 obj 的类型可分配给类型为 Child 的变量,否则 cast() 将抛出 ClassCastException )

关于java - 为什么 Class.getClass() 可以不同于 Class.cast() 返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7919161/

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