我试图了解getClass
方法返回Class<? extends |X|>
的原因是什么?
来自public final native Class<?> getClass();
附近的openjdk:
实际结果类型为
Class<? extends |X|>
其中|X|
是静态类型的擦除 调用getClass
的表达式。
为什么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!
答案 0 :(得分:6)
Foo foo = new SubFoo();
您期望foo.getClass()
返回什么? (它将返回SubFoo.class
。)
这一点的一部分:getClass()
返回真实对象的类,而不是引用类型。否则,您可以只编写引用类型,而foo.getClass()
永远不会与Foo.class
有任何不同,所以您只需编写第二个。
(顺便提一下,getClass()
实际上在类型系统中有自己的特殊处理方式,而不是像其他任何方法一样,因为SubFoo.getClass()
不会返回Foo.getClass()
的子类型。)