Javaのリフレクション


■リフレクション
クラスのフィールド、メソッド、およびコンストラクタに関する情報を取得する。

Javaではjava.lang.reflectパッケージが用意されている。

import java.lang.reflect.*;

public class ReflectHelloWorld {
  public static void main(String[] args) {
    try {
      int i,j;

      // クラスの取得 ★解析したいクラスを指定★
      Class cls = Class.forName("java.lang.String");

      // フィールドの分析
      Field[] fieldList = cls.getFields();
      for (i=0;i<fieldList.length;i++) {
        Field fld = fieldList[i];
        // 修飾子を表示
        System.out.print(Modifier.toString(fld.getModifiers()));
        // 型を表示
        System.out.print(" " + fld.getType().getName());
        // フィールド名を表示
        System.out.println(" " + fld.getName() + ";");
      }
      System.out.println("");

      // コンストラクタの分析
      Constructor[] ctorList = cls.getConstructors();
      for (i=0;i<ctorList.length;i++) {
        Constructor ct = ctorList[i];
        // 修飾子を表示
        System.out.print(Modifier.toString(ct.getModifiers()));
        // クラス名(コンストラクタ名)を表示
        System.out.print(" " + ct.getDeclaringClass().getName());
        // 引数の型を表示
        Class[] cparamList = ct.getParameterTypes();
        System.out.print("(");
        for (j=0;j<cparamList.length;j++) {
          System.out.print(" " + cparamList[j].getName());
        }
        System.out.println(");");
      }
      System.out.println("");

      // メソッドの分析
      Method[] methList = cls.getMethods();
      for (i=0;i<methList.length;i++) {
        Method m = methList[i];
        // 修飾子を表示
        System.out.print(Modifier.toString(m.getModifiers()));
        // 戻り値の型を表示
        System.out.print(" " + m.getReturnType().getName());
        // メソッド名を表示
        System.out.print(" " + m.getName());
        // 引数の型を表示
        Class[] mparamList = m.getParameterTypes();
        System.out.print("(");
        for (j=0;j<mparamList.length;j++) {
          System.out.print(" " + mparamList[j].getName());
        }
        System.out.println(");");
      }
      System.out.println("");
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
} 

参考にしたページ

http://www.hellohiro.com/reflection.htm