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

时间:2013-11-25 15:18:38

标签: java class object reflection superclass

根据Class.getSuperclass() documentation

  

返回表示实体超类的类(类,   此类表示的接口,基本类型或void)。如果这   Class表示Object类,接口和基元   type或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.
}

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

3 个答案:

答案 0 :(得分:7)

文档说如果您的课程为java.lang.Object,则其getSuperclass将返回null。换句话说,如果你这样做

Class objSuper = Object.class.getSuperclass();

然后objSuper将是null;这正是发生的事情(demo)。

但是,您的modelClass似乎不是 java.lang.Object,而且它也不是原语或界面。因此,返回java.lang.Object非常有意义,因为所有类都隐式继承它。

答案 1 :(得分:1)

据我所知,文档中的此类指的是getSuperclass()方法的调用者。

因此,如果调用者是Object类或基本类型/接口,则返回的超类将是null,这在我看来完全有道理。

答案 2 :(得分:1)

如果您需要了解Object是否为您班级的直接家长,可以使用

System.out.println(YourObject.class.getSuperclass() == Object.class);

否则你应该知道最后每个对象都继承Object类。 Object将返回.getSuperclass()

,而不是null类本身