パンくず
書籍 パーフェクトJava
リフレクション
オブジェクトの生成と操作
概要
Javaのリフレクションのオブジェクトの生成と操作について。
サンプルコード
package perfect.reflection; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.List; public class SampleReflection3 { enum NUM { ONE, TWO, THREE }; @SuppressWarnings("unused") public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, SecurityException, InvocationTargetException, NoSuchMethodException { // ClassクラスのstaticメソッドのclassForNameによる取得 Class<SampleReflectionInner> clazz = getClass("perfect.reflection.SampleReflection3$SampleReflectionInner"); // ClassクラスのnewInstanceによるインスタンス生成 SampleReflectionInner hoge1 = clazz.newInstance(); hoge1.hoge("hoge"); hoge1.hoge(); // ConstructorクラスのnewInstanceによるインスタンス生成 SampleReflectionInner hoge2 = clazz.getConstructor(String.class).newInstance("constructor"); hoge2.hoge("hoge"); hoge2.hoge(); // メソッドの呼び出し Method hogeMethod = clazz.getMethod("hoge", String.class); hogeMethod.invoke(hoge2, "hogeParam"); } @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 SampleReflectionInner() { } public SampleReflectionInner(String hoge) { this.name = hoge; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void hoge() { System.out.println("hoge:" + this.name); } public void hoge(String hoge) { System.out.println("hoge:" + hoge); } } }
出力
hoge:hoge hoge:null hoge:hoge hoge:constructor hoge:hogeParam