javaのリフレクション機能

java-reflection.png

普通のコード リフレクションのコード
//引数
Object[] doubleArgs = {4.2,3.9};
//クラスを取得する
Class rectangleDefinition = Class.forName("MyProj.Rectangle");
Rectangle rectangle = new Rectangle(4.2,3.9);
//コンストラクタの呼び出し
Class[] doubleArgsClass = new Class[]{double.class,double.class};
Constructor doubleArgsConstructor = rectangeDefinition.getConstructor(doubleArgsClass);
Rectangle rectange= (Rectangle) doubleArgsConstructor.newInstance(doubleArgs);
Double area = rectangle.area();
//関数の呼び出し
Method method = rectangleDefinition.getDeclaredMethod("area");
Double area = (Double) method.invoke(rectangle);

リフレクションは何の役に立つのか?

  • アプリケーション実行時の動作や監視や操作に役立つ
  • メソッド、コンストラクタ、フィールドに直接アクセスできるので、デバッグやテストに役立つ
  • メソッドを知らない場合に名前でメソッドを呼び出すことができる。たとえば、リフレクションを用いてクラス名やコンストラクタのパラメータやメソッド名を知り、その情報を用いて新たにクラスを生成したりメソッドの呼び出しができる。もしこれをリフレクションなしでやろうとすれば、if文ばっかりになってしまうだろう

サポートサイト Wikidot.com