この記事では、以下の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を使う必要があります。
以上で記事の解説はお終い!
もっとJavaやSpringを勉強したい方にはUdemyがオススメ!同僚に差をつけよう!