有如下代码:
public class ReflectTest {
private String name = "hello";
public String getName() {
return name;
}
}
根据上述代码问是否可以修改ReflectTest对象的name值?
答案:可以。我们可以通过反射来修改对象的私有属性值具体代码如下:
public class ReflectTestMain {
public static void main(String[] args) throws Exception {
ReflectTest rt = new ReflectTest();
Class<?> cls = ReflectTest.class;
Field name = cls.getDeclaredField("name");
name.setAccessible(true); //在设置私有属性值之前要压制访问权限的检查否则会报java.lang.IllegalAccessException
name.set(rt, "oneTarget");
System.out.println(rt.getName());
}
}
补充知识点:
获得某个类的class对象的四种方式:
- 通过类名.class的方式
- 通过类的对象.getClass()的方式
- 通过Class.forName的方式
- 如果是基本数据类型的包装类那么还可以通过包装类.TYPE的方式