リフレクションその2です。
前回はprivate変数に値をセットしましたが、今度は逆にprivate変数から値を取得してみます。
フレームワークやライブラリを作るときにどうぞw
Java リフレクションでprivate変数から値を取得するサンプル
privateなフィールド変数にセットされた値をリフレクションで取得。
取得した結果を標準出力します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | import java.lang.reflect.Field; public class RefFieldTest2 { private String str1 = null; private String str2 = null; private String str3 = null; public static void main(String[] args) { try { RefFieldTest2 obj = new RefFieldTest2(); //作成したインスタンスのフィールドに値をセット obj.setStr1("ロン!"); obj.setStr2("大三元 字一色 四暗刻"); obj.setStr3("\(^o^)/オワタ"); //セットしたフィールド値を取得 System.out.println("str1:" + getFieldValue(obj,"str1")); System.out.println("str2:" + getFieldValue(obj,"str2")); System.out.println("str3:" + getFieldValue(obj,"str3")); } catch (Exception e) { e.printStackTrace(); } } public static Object getFieldValue(Object obj,String filedName) throws Exception { Class<? extends Object> clazz = obj.getClass(); Field field = clazz.getDeclaredField(filedName); return field.get(obj); } public void setStr1(String str1) { this.str1 = str1; } public void setStr2(String str2) { this.str2 = str2; } public void setStr3(String str3) { this.str3 = str3; } } |
実行結果
1 2 3 | str1:ロン! str2:大三元 字一色 四暗刻 str3:\(^o^)/オワタ |
サンプルの解説
Class#getDeclaredField(String)にて、目的のフィールド変数名を指定して、Fieldインスタンスを取得。
取得したFieldインスタンスを利用して、Field#get(Object)にて、private変数より値を取得することができます。
なお、必要に応じて、取得する前に、Field#setAccessible(true)を指定して、Javaセキュリティを抑制して、アクセス権を得る必要があります。
リフレクションで値を設定するには・・・?
リフレクションで値を設定する方法は、こちらを見てください。