【8/27まで】Udemyの人気コースが今なら1,200円から!!

【Java入門】リフレクションでprivateフィールドの値を設定する方法(値を書き換える方法)

【Java入門】リフレクションでprivateフィールドの値を設定する方法

この記事では、以下のProductクラスが持つ、fieldValフィールドの値をリフレクションを使って設定する方法(書き換える方法)をまとめています。

Product.java

public class Product {

    private String fieldStr = "ハローワールド";
    private int fieldVal = 100;

    private void Twice(){
        this.fieldVal = fieldVal * 2;
    }
}

private変数の値を設定する方法(書き換える方法)

ProductTest.java

//インスタンスを取得。
Product obj = new Product();

//フィールドを取得。
Field field = Product.class.getDeclaredField("fieldVal");

//フィールドにアクセスできるようにする。
field.setAccessible(true);

//フィールドの値を出力。
System.out.println("メソッド実行前:" + field.get(obj));

//フィールドの値を書き換える。
field.setInt(obj, 1000);

//メソッドを取得。
Method method = Product.class.getDeclaredMethod("Twice");

//メソッドにアクセスできるようにする。
method.setAccessible(true);

//メソッド実行
method.invoke(obj);

//フィールドの値を出力。
System.out.println("メソッド実行後:" + field.get(obj));

実行結果

メソッド実行前:100
メソッド実行後:2000
解説
14行目でフィールドの値を1000に書き換えています。
そのため、Twiceメソッドで1000*2=2000となり、26行目で2000が出力されます。
getDeclaredFieldとgetFieldの違い
取得したいメンバがpublicの場合はgetFieldで取得することができますが、
public以外のメンバーを取得したい場合はgetDeclaredFieldを使う必要があります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です