2013-11-25 84 views
5

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

返回表示此Class所表示的实体(类, 接口,基本类型或void)的超类。如果这个 类代表对象类,接口,原始类型或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

在你的场景中,一切都是''instanceof''对象'。你想达到什么目的? –

+0

我不会详细讨论,但正在使用反射循环遍历类的所有方法,并递归地除了Object以外的所有祖先。 –

+0

如果你不想详细说明,那么我不知道我如何能得到帮助。如果我知道你的意图,也许有一种不同的方式来做你想做的事情。 –

回答

7

该文件说如果您的班级是java.lang.Object,那么其getSuperclass将返回null。换句话说,如果你这样做

Class objSuper = Object.class.getSuperclass(); 

然后objSupernull;这正是发生了什么事情(demo)。

然而,看起来你的modelClass而不是java.lang.Object,它也不是原始的或接口。因此,返回java.lang.Object是非常有意义的,因为所有类都隐式地从它继承。

+0

现在我明白了。现在已将文档的第一句话添加到问题中。这句话中提到了两个“课”,我错误地认为第二句认为它指的是第一个,而不是第二个。感谢您解决这个问题。 –

1

这个类在文档中指的是getSuperclass()方法的调用方据我所知。

所以如果调用者是Object类或原始类型/接口超类返回将是null这在我看来是完全意义上的。

1

如果你需要找出是否Object是你的类的直接家长,您可以使用

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

否则你应该知道,在年底的每个对象继承Object类。 Object类本身,所以.getSuperclass()将返回null

+0

谢谢,我一直在寻找这个。 :d – DoombringerBG

相关问题