検索
連載

Java Tips:正体不明のオブジェクトのクラスを調べるには?

開発中やデバッグ時に、オブジェクトのクラス名を調べたい場合、通常は自ら作ったオブジェクトクラスではあり得ませんが、コレクションに格納されているオブジェクトではソースコード上では分からなくなります。ちょっとしたコードでクラス名を取得する方法を紹介しましょう。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

正体不明のオブジェクトのクラスを調べるには?

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 J2SEのコアパッケージでも頻繁に利用されていますが,コレクションクラスを利用していると,格納されているオブジェクトがわからなくて戸惑うことがあります。コレクションはすべてObjectとして保持するため,ソースコード上ではObjectクラスにしか見えなくなってしまうのです。

 たとえば,クラスjava.net.NetworkInterfaceのJavadocのうち,getNetworkInterfacesメソッド部分を読んでいると,次のように記載されています。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 注意深く読むと,NetworkInterfaceクラスがコレクションに格納されていることが想像できますが,少なくとも格納されているオブジェクトに関して明言されていません。

 コレクションを利用していると,このようなことが頻繁に起きます。Tiger(J2SE 5,あるいは従来J2SE 1.5と呼ばれていたバージョン)でGenericsを用いると,コレクションに格納されているオブジェクトが明確になりますが,従来のライブラリやオープンソースソフトウェアでは,まだ当分は従来のコレクションのままで利用されることが予想できます。

 そこで,ここでは任意のオブジェクトのクラス名を表示するサンプルを紹介しましょう。これはとても簡単に実現できます。覚えておくと何かにつけて便利です。

Objectクラスがすべての鍵を握る

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 まず,すべてのオブジェクトはgetClassメソッドを持ちます。これはObjectクラスから継承したメソッドですので,このメソッドを持たないオブジェクトはありません。しかも,final修飾子がついていますので,サブクラスでオーバーライドされることはありません。必ず対象オブジェクトのClassが取得できます。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 次にClassクラスはgetNameメソッドを呼び出すことにより,完全修飾クラス名(FQCN)が取得できます。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 こうすることにより,対象オブジェクトの完全修飾クラス名が取得できることになります。

 まとめると,次のようにgetClassとgetNameの2段階呼び出しで,すべてのオブジェクトのクラス名がわかるようになります。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 「JAVA Developer」より毎週役立つJava Tipsを配信中。ほかにも参考になるTipsは、JAVA Developerサイトのバックナンバーから探すことが可能です。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

Copyright(C) 2010 SOFTBANK Creative Inc. All Right Reserved.

ページトップに戻る