• ベストアンサー

あるクラスであるかどうかを確認する方法は?

あるクラスが特定のクラスである事を確認する方法が知りたいです。 例えば下記のようにCクラスがBクラスを継承し、BクラスがAクラスを継承していた場合。 あるメソッドでAクラスの引数を受け取ったが、これがAクラスであるかどうかを判別したいです。(BではなくかつCではない) instanceofを使用し、Cでfalse、Bでfalseと判別する方法以外でありましたらお願いします。 Aクラス ..| ..+--Bクラス ......| ......+--Cクラス

質問者が選んだベストアンサー

  • ベストアンサー
  • komi1341
  • ベストアンサー率65% (25/38)
回答No.2

判別方法については、instanceofを使って一つ一つチェックするか、getClass().getName()で文字列判定をするか、が一般的だと思います。あとはクラスごとにstaticな値をIDとしてつけてやってそれで判定するとか、泥臭い手段ならいろいろあるでしょう。 ただそれよりも、「オブジェクトがAのインスタンスであると確認する必要がある」という状況が気になります。継承関係がちゃんと「is a」の関係になっているかどうか、つまり設計に無理がないかをまず確認してもいいかもしれませんね。

tetuya120
質問者

お礼

回答ありがとうございます。 getClass().getName()で判定することにしました。 状況については説明が難しいですが、かなり特殊な処理なので。。。 (勿論設計に問題がない訳ではないですがw)

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

B でなければ C でないのは明らかなので, 実は「C でない」という判定は不要ですね. それ以外には思いつかない.

tetuya120
質問者

補足

回答ありがとうございます。 こちらで調べてみたところ下記のようにClassのgetNameを使用する事で判別ができることがわかりました。 後、とりあえずキャストしてみてtrycatchとかでもできそうです。 綺麗じゃないですが。。。 Class tmpclass = hoge.getClass(); if ((new A().getClass().getName().equals(tmpclass.getName()))) { break; }

関連するQ&A