Why does Class.getSuperclass() sometimes return Object.class?

class, java, object, reflection, superclass

Solution

The documentation says that if your class is `java.lang.Object`, then its `getSuperclass` is going to return `null`. In other words, if you do this

Class objSuper = Object.class.getSuperclass();

then `objSuper` would be `null`; this is precisely what's happening (demo).

It appears, however, that your `modelClass` is not `java.lang.Object`, and it is also not a primitive or an interface. Therefore, returning `java.lang.Object` makes perfect sense, because all classes implicitly inherit from it.

Problem

According to the Class.getSuperclass() documentation: Returns the Class representing the superclass of the entity (class, interface, primitive type or void) represented by this Class. If this Class represents either the Object class, an interface, a primitive type, or void, then null is returned. But I'm sometimes seeing `Object.class` being returned (using jdk1.7.0_45) - so am having to check for it separately: ``` final Class<?> superclass = modelClass.getSuperclass(); if ((superclass != null) && (Object.class != superclass)) { // Do stuff with superclasses other than Object. } ``` Is this a Java bug? Is there a better way of checking whether `superclass` is an `Object`?

Original source