リフレクションその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セキュリティを抑制して、アクセス権を得る必要があります。
リフレクションで値を設定するには・・・?
リフレクションで値を設定する方法は、こちらを見てください。












