パンくず
書籍 パーフェクトJava
リフレクション
概要
Javaのリフレクションについて。
リフレクションとは実行中に型情報を取得し、
型そのものを操作対象とする仕組み。
Classクラス
Classクラスは、型情報を保持するクラス。
フィールド一覧やメソッド一覧を利用可能。
サンプルコード
package perfect.reflection; public class SampleReflection1 { public static void main(String[] args) throws ClassNotFoundException { // クラスリテラルによるClassオブジェクトの取得 Class<SampleReflectionInner> hogeClass1 = SampleReflectionInner.class; System.out.println(hogeClass1); System.out.println(hogeClass1.hashCode()); // ObjectのgetClassメソッドによる取得 SampleReflectionInner hoge = new SampleReflectionInner(); Class<? extends SampleReflectionInner> hogeClass2 = hoge.getClass(); System.out.println(hogeClass2); System.out.println(hogeClass2.hashCode()); // ClassクラスのstaticメソッドのclassForNameによる取得 Class<SampleReflectionInner> hogeClass3 = getClass("perfect.reflection.SampleReflection1$SampleReflectionInner"); System.out.println(hogeClass3); System.out.println(hogeClass3.hashCode()); } @SuppressWarnings("unchecked") public static <T> Class<T> getClass(String className) throws ClassNotFoundException { // Class型の変数名は伝統的にclazzを利用する。 Class<T> clazz = (Class<T>) Class.forName(className); return clazz; } public static class SampleReflectionInner { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public void hoge(String hoge) { System.out.println("hoge:" + hoge); } } }
出力
class perfect.reflection.SampleReflection1$SampleReflectionInner 17192413 class perfect.reflection.SampleReflection1$SampleReflectionInner 17192413 class perfect.reflection.SampleReflection1$SampleReflectionInner 17192413