巧用反射机制修改私有变量值
package com.test.reflection; public class Test {private String str = "C++"; public String getStr() {return str;} }
?
?
?
为了将私有变量str里保存的值“C++”修改为“java”,我建立另一个测试类,代码如下:
package com.test.reflection; import java.lang.reflect.Field; public class Main { /*** @param args* @throws NoSuchFieldException * @throws SecurityException * @throws IllegalAccessException * @throws IllegalArgumentException */public static void main(String[] args) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {// TODO Auto-generated method stubTest test = new Test();Class clacc = Test.class;Field field = clacc.getDeclaredField("str");field.setAccessible(true);//设置true,使其不在检查访问修饰符。field.set(test, "java");System.out.println(test.getStr()); } }
?