Javaその他

Javaのリフレクションを利用してみた(メソッド編)

リフレクションを利用すると、クラス名・メソッド名・引数を指定して、指定したクラスのメソッドを動的に実行することができるため、メソッド名・引数・戻り値が全て同一でクラス名だけが違うクラスが複数存在する場合に、1つのプログラムで処理することができる。

今回は、リフレクションを利用し、引数や戻り値がある場合、privateメソッドの場合、staticメソッドの場合、コンストラクタに引数がある場合を含むようなサンプルプログラムを作成したので、共有する。

前提条件

下記記事のIntelliJ IDEA Community版をダウンロード済であること。

IntelliJ IDEAをインストールしてみた「IntelliJ IDEA(インテリジェイ アイディア)」という、Eclipseと同等の機能をもつJava用統合開発環境を使って、Sp...

また、下記のように、「demoJava」というJavaプロジェクトを作成済であること。
demoJavaプロジェクト

なお、IntelliJ IDEA上でJavaプロジェクトを作成する方法については、IntelliJ IDEA Community版をダウンロードする記事内の、「IntelliJ IDEA上でのJavaプロジェクトの作成・実行」を参照のこと。

リフレクションを利用したサンプルプログラムの作成と実行

今回作成したサンプルプログラムの構成は以下の通り。
リフレクションを利用したサンプルプログラムの構成

今回は、「CallSampleMethod.java」で「SampleMethod.java」「SampleMethod2.java」の各メソッドの呼び出しを行っている。それぞれのプログラムの内容は以下の通り。

さらに、その実行結果は以下の通り。
リフレクションを利用したサンプルプログラムの実行結果

要点まとめ

  • Class.forName(クラスのフルパス)でクラスオブジェクトの生成が行える。
  • クラスオブジェクトのgetDeclaredConstructorメソッドを呼び出し後、newInstanceメソッドを呼び出すことにより、クラスのインスタンス生成が行える。
  • クラスオブジェクトのgetDeclaredMethodメソッドを呼び出し後、invokeメソッドを呼び出すことにより、メソッドの呼び出しが行える。