リフレクション


定義済のクラスの情報にアクセスするためのしくみをリフレクションと呼ぶ。

🐰 Classクラス

Classクラスはプログラムの実行時、クラスがロードされた時点で生成されるクラスやインタフェースに関する情報をもつオブジェクトです。

以下はClass型のインスタンスを得る際のサンプルです。

package com.morizyun.sample;
class Hoge {
}
public class Main {
public static void main(String[] args) {
// 予約語としての class からインスタンスを取得
System.out.println(Hoge.class.getSimpleName());
// 基底クラスである Objectのメソッドからインスタンスを取得
System.out.println(new Hoge().getClass().getSimpleName());
// FQDN によるクラス名を指定して、インスタンスを取得
Class<?> klass = Class.forName(com.morizyun.Hoge);
}
}

以下はClass型のオブジェクトを介して、クラスに関する情報にアクセスするサンプルです。

package com.morizyun.sample;
class Hoge {
}
public class Main {
public static void main(String[] args) {
Class<?> klass = Class.forName(com.morizyun.sample.Hoge);
// クラスの宣言に付与されたアノテーションを取得
Annotation[] annotations = klass.getAnnotations();
// クラスの宣言にある public なコンストラクタの定義を取得
Constructor<?>[] constructors = klass.getConstructors();
// private なコンストラクタも含めてコンストラクタの定義を取得
Constructor<?>[] allConstructors = klass.getDeclaredConstructors();
// アクセス可能なすべてのフィールドの定義を取得
Field[] fields = klass.getFields();
// 定義されたすべてのフィールドを取得
Field[] allFields = klass.getDeclaredFields();
// public なメンバメソッドを取得
Method[] methods = klass.getMethods();
// すべてのメソッドを取得
Method[] allMethods = klass.getDeclaredMethods();
}
}

🍮 参考リンク

📚 おすすめの書籍