为什么Class.getSuperclass()有时会返回Object.class?

Ste*_*ers 5 java reflection class object superclass

根据Class.getSuperclass()文档:

返回表示此Class表示的实体(类,接口,基本类型或void)的超类的Class.如果此Class表示Object类,接口,基本类型或void,则返回null.

但我有时会看到Object.class被退回(使用jdk1.7.0_45) - 所以我必须单独检查它:

final Class<?> superclass = modelClass.getSuperclass();
if ((superclass != null) && (Object.class != superclass)) {
     // Do stuff with superclasses other than Object.
}
Run Code Online (Sandbox Code Playgroud)

这是一个Java错误吗?有没有更好的方法来检查是否superclass是一个Object

das*_*ght 7

文档说,如果你的班级是java.lang.Object,那么它将getSuperclass返回null.换句话说,如果你这样做

Class objSuper = Object.class.getSuperclass();
Run Code Online (Sandbox Code Playgroud)

然后objSupernull; 这正是发生的事情(演示).

它的出现,不过,您modelClass不是 java.lang.Object,而且这也不是一种原始的或接口.因此,返回java.lang.Object很有意义,因为所有类都隐含地继承它.