2013-11-25 10 views
5

なぜClass.getSuperclass()はObject.classを返すのですか? <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getSuperclass()" rel="nofollow noreferrer">Class.getSuperclass() documentation</a>によれば

このクラスによって表されるエンティティ(クラス、 インタフェース、プリミティブ型、またはvoid)のスーパークラスを表すクラスを返します。 this ClassがObjectクラス、インタフェース、プリミティブ 型、またはvoidのいずれかを表す場合、nullが返されます。

しかし、私は時々(jdk1.7.0_45を使用して)Object.classが返されて見ている - ので、別にそれを確認するために持っています:

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

は、これは、Javaのバグですか? superclassObjectかどうかを確認する良い方法はありますか?

+0

あなたのシナリオでは、すべてが 'インスタンス'の 'オブジェクト'です。あなたは何を達成しようとしていますか? –

+0

私は詳細には触れませんが、クラスのすべてのメソッドと、オブジェクトを除くすべての祖先を再帰的にループするためにリフレクションが使用されています。 –

+0

あなたが細かいところに行かなければ、私はどのように援助できるのか分かりません。私があなたの意図を知っていれば、おそらくあなたがやろうとしていることをやり遂げるための別の方法があります。 –

答えて

7

あなたのクラスがjava.lang.Objectの場合、そのgetSuperclassnullを返すと書かれています。あなたはこの

Class objSuper = Object.class.getSuperclass(); 

を行う言い換えれば、その後objSupernullだろう。これはまさに何が起こっているかです(demo)。

modelClassではありません。 であり、プリミティブでもインターフェイスでもありません。したがって、すべてのクラスが暗黙的に継承するため、java.lang.Objectを返すのは理にかなっています。

+0

ああ今、私は理解しています。ドキュメントの最初の文を質問に追加しました。その文で言及される2つの「クラス」があり、第2の文が第2の文ではなく第1の文を指していると誤って思っていました。これをクリアしていただきありがとうございます。 –

1

こののこのクラスは、私が理解する限りgetSuperclass()メソッドの呼び出し元を参照しています。

したがって、呼び出し側がObjectクラスまたはプリミティブ型/インタフェースのいずれかである場合、返されるスーパークラスはnullとなり、私の意見では完全に意味があります。

1

あなたはObjectがあなたのクラスの直接親であるならば、あなたがそうでなければ、あなたが最後に各オブジェクトがObjectクラスを継承することを知っている必要があり

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

を使用することができます見つけるために必要がある場合。 Objectクラスの代わりに、.getSuperclass()nullを返します。

+0

ありがとう、私はこれを探していた。 :D – DoombringerBG

関連する問題