Javaリフレクションを利用してメンバー変数を変更する方法

以下のステップで Java のリフレクションを使用してメンバー変数を変更できます。

  1. 変更対象クラスのClassオブジェクトを取得する。
  2. ClassオブジェクトのgetDeclaredField(String name)メソッドを使用して、変更が必要なメンバ変数のFieldオブジェクトを取得する。
  1. プライベートなメンバー変数を変更する必要がある場合、getDeclaredField()メソッドを使用。パブリックな場合、getField()メソッドを利用可。
  1. フィールドオブジェクトのsetAccessible(true)メソッドを使用して、プライベートメンバー変数を変更できるようにメンバー変数の可視性を設定する。
  2. Fieldオブジェクトのset(Object obj, Object value)メソッドを使用して、メンバー変数の値を新しい値に変更します。
  1. 最初の引数は、メンバ変数が属するオブジェクトへの参照であり、メンバ変数に static がついている場合は null が渡せます。
  2. 2番目の引数は新規の値。

例のコードは以下の通りです。

import java.lang.reflect.Field;
public class MyClass {
private String myField = "Hello";
public static void main(String[] args) throws Exception {
MyClass obj = new MyClass();
// 获取Class对象
Class<?> cls = obj.getClass();
// 获取需要修改的成员变量Field对象
Field field = cls.getDeclaredField("myField");
// 设置成员变量的可访问性
field.setAccessible(true);
// 修改成员变量的值
field.set(obj, "World");
// 输出修改后的成员变量的值
System.out.println(obj.myField);
}
}

上記のコードを実行すると、結果は次のようになります。

World
bannerAds