Java 反射获取对象的私有成员变量
如题:如何修改User对象的name属性的值?
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
解题思路:
1:通过反射拿到User类的字节码,
2:通过字节码获取到User类的uname的字段,然后修改相应的值
[注意] 记得设置Field对象的访问权限为true
User user = new User();
System.out.println(user.getName());
try{
Class userClass = Class.forName(User.class.getName());
Field userNameField = userClass.getDeclaredField("name");
userNameField.setAccessible(true); // 必要
userNameField.set(user, "岳云鹏");
System.out.println(user.getName());
}catch (Exception e){
e.printStackTrace();
}