gpt4 book ai didi

java - 为什么 getClass 返回一个 Class<?扩展 |X|>?

转载 作者:行者123 更新时间:2023-12-05 00:18:25 24 4
gpt4 key购买 nike

我试图了解 getClass 的原因是什么返回方法 Class<? extends |X|> ?

来自 openjdk附近public final native Class<?> getClass(); :

The actual result type is Class<? extends |X|> where |X| is the erasure of the static type of the expression on which getClass is called.



为什么不能 getClass具有相同的类型,例如 XClass.class , 例如:
class Foo {}
Foo fooInstance = new Foo();
Class<Foo> fc = Foo.class; // Works!
Class<Foo> fc2 = fooInstance.getClass(); // Type mismatch ;(
Class<?> fc3 = fooInstance.getClass(); // Works!
Class<? extends Foo> fc4 = fooInstance.getClass(); // Works!

最佳答案

Foo foo = new SubFoo();

你有什么期待 foo.getClass()返回? (它将返回 SubFoo.class 。)

这是整个要点的一部分:那 getClass()返回真实对象的类,而不是引用类型。否则,你可以只写引用类型,然后 foo.getClass()永远不会与 Foo.class 有任何不同,所以你无论如何都要写第二个。

(顺便说一下, getClass() 在类型系统中实际上有它自己的特殊处理,不像任何其他方法,因为 SubFoo.getClass() 不返回 Foo.getClass() 的子类型。)

关于java - 为什么 getClass 返回一个 Class<?扩展 |X|>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37796705/

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