首页 > 解决方案 > get Class 方法的返回类型与实际返回类型不同

问题描述

当我创建一个类 A 的实例并尝试访问它的 getClass() 方法时,它的返回类型与 java Object 类中提到的不同。

A a = new A() ;
Class<? extends A> clazz = a.getClass();

即使当我在 Intellij 中访问上面提到的 getClass 方法时,它也说它的返回类型是Class<? extends A> ,甚至 java doc 也说它返回通配符扩展上限。我完全可以接受。因为我可以创建 B 的实例并引用 A 并访问 getClass 方法。

但是为什么getClass方法的返回类型只是Class<?>在Object类中

编辑1(安迪·特纳评论后)

Class A {
   List<?> returningNullList() {
     return null;
   } 
} 

当我创建 A 的实例并尝试访问返回NullList () 方法时,它没有给我返回类型为List<? extends A>. 但是当我尝试访问 getClass 方法时,它说返回类型是Class<? extends A>虽然实际的硬编码返回类型Class<? >在 Object.java 文件中

getClass 方法是否被编译器特殊处理?

标签: javaobjectgenericswildcardreturn-type

解决方案


但是为什么getClass方法的返回类型只是Class<?>在Object类中

Class<?>与 相同Class<? extends Object>,因为所有类(除了Object)都Object具有超类。没有理由明确包含该界限。


推荐阅读