Classがabstractか否かを知る方法

| コメント(0) | トラックバック(0)
自動生成系のコードを書いていると、うっかりinterfaceやabstractクラスが渡されてnewInstance()できず(´・ω・`)ショボーンとなり、これはいけません。

ところがClassがInterfaceかどうかはClassクラスのメソッド、isInterface()で知る事ができますが、abstractかどうかを知るメソッドが一見見あたらない。

恐らく優れた方々は普通に知っているのでしょうが、検索しても見つけられず(ま、私の探し方が未熟なんですが(汗))、仕方なくURLClassLoaderの実装を眺めていたら見つけた。

abstractなどクラス宣言に付加する修飾子(publicやfinal、staticなどもこれです)はClass#getModifiers()を使います。

ClassクラスのJavaDocをしっかり探していれば見つかったはずなのですが、分かりづらくてスルーしていた。

たぶん返り値がintだったのもスルーしていた原因です。

返り値はintの各ビットが立っているかどうかで各修飾子が付いているかどうかを表します。ビットはjava.lang.reflect.Modifierクラスの定数として定義されています。abstractなら

  (clazz.getModifiers & Modifier.ABSTRACT) > 0

こんな感じでしょうか。

Modifireクラスにはもっと便利なstaticメソッドが用意されていて、Modifire.isAbstract(clazz.getModifires())これ。

これでOK。



トラックバック(0)

トラックバックURL: http://www.iwazer.com/mt/mt-tb.cgi/268

コメントする

このブログ記事について

このページは、iwazerが2009年3月22日 23:41に書いたブログ記事です。

ひとつ前のブログ記事は「液晶モニター(Westinghouse L2210NW)買ったどー」です。

次のブログ記事は「HIBRIA」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。