Java リフレクションでprivate変数に値をセットする




O/Rマッピングを自作するような奇特な方とか、他社のソースで手を出せない方とか?
・・・この例は、ちょっとひどいかw

ま、それはともかく、インスタンス変数にアクセスしたいときはあるものです。
これを知ってると、情緒不安定から抜け出せるかもしれません。

乱用すると他の人が泣くので、ご利用は計画的にw

private変数に値をセットするサンプル

RefFieldTestのインスタンス変数であるstr1~str3に、リフレクションを使って値をセットします。
セット後、確認のため、標準出力を行います。

実行結果

サンプルの解説

Class#getDeclaredConstructor()#newInstance()にて、目的のインスタンスを生成することができます。
もちろん、コンストラクタに引数がある場合、値をセットすることが可能です。

インスタンスを生成後は、フィールドに値を詰め込むわけですが、こちらは、Field#set(Object,Object)で簡単にできちゃいます。

この例では自身のクラス内のprivate変数なので面白くないですが、他クラスのprivate変数でも同様に可能です。
そんなときは、フィールド値にアクセスする前に、Field#setAccessible(boolean)を呼び出しましょう。

リフレクションで値を取得するには・・・?

リフレクションで値を取得する方法は、こちらを見てください。

Java リフレクションでprivate変数から値を取得する

2018.01.29