- ベストアンサー
あるクラスであるかどうかを確認する方法は?
あるクラスが特定のクラスである事を確認する方法が知りたいです。 例えば下記のようにCクラスがBクラスを継承し、BクラスがAクラスを継承していた場合。 あるメソッドでAクラスの引数を受け取ったが、これがAクラスであるかどうかを判別したいです。(BではなくかつCではない) instanceofを使用し、Cでfalse、Bでfalseと判別する方法以外でありましたらお願いします。 Aクラス ..| ..+--Bクラス ......| ......+--Cクラス
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
判別方法については、instanceofを使って一つ一つチェックするか、getClass().getName()で文字列判定をするか、が一般的だと思います。あとはクラスごとにstaticな値をIDとしてつけてやってそれで判定するとか、泥臭い手段ならいろいろあるでしょう。 ただそれよりも、「オブジェクトがAのインスタンスであると確認する必要がある」という状況が気になります。継承関係がちゃんと「is a」の関係になっているかどうか、つまり設計に無理がないかをまず確認してもいいかもしれませんね。
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
B でなければ C でないのは明らかなので, 実は「C でない」という判定は不要ですね. それ以外には思いつかない.
補足
回答ありがとうございます。 こちらで調べてみたところ下記のようにClassのgetNameを使用する事で判別ができることがわかりました。 後、とりあえずキャストしてみてtrycatchとかでもできそうです。 綺麗じゃないですが。。。 Class tmpclass = hoge.getClass(); if ((new A().getClass().getName().equals(tmpclass.getName()))) { break; }
お礼
回答ありがとうございます。 getClass().getName()で判定することにしました。 状況については説明が難しいですが、かなり特殊な処理なので。。。 (勿論設計に問題がない訳ではないですがw)