問題:如何修改一個私有的成員變量?
public class PrivateTest {
private String name = "hello";
public String getName() {
return this.name;
}
}
>關鍵點:設置Field 的可訪問
public class ReflectionTest {
public static void main(String[] args) throws Exception {
PrivateTest pt = new PrivateTest();
Class<?> clazz = pt.getClass();
// clazz.getField() 獲得一個public成員
// Field field = clazz.getField("name");
Field field = clazz.getDeclaredField("name");
// 設置爲可訪問來壓制訪問控制修飾符,否則報錯:
// Class com.dareway.re.ReflectionTest can not access a member of class
// com.dareway.re.PrivateTest with modifiers "private"
field.setAccessible(true);
System.out.println(field.get(pt));
// 修改成員
field.set(pt, "world");
System.out.println(field.get(pt));
}
}