根据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
?
答案 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
类本身