java使用反射给对象属性赋值的两种方法
方法一:使用Class类的getMethod()和setAccessible()方法;
`public class User {
private String name;
public void setName(String name) {
this.name = name;
}
}
public static void main(String[] args) throws Exception {
// 创建User对象
User user = new User();
// 获取setName()方法
Method setNameMethod = User.class.getDeclaredMethod("setName", String.class);
// 调用setAccessible()方法,使得可以访问setName()方法
setNameMethod.setAccessible(true);
// 在User对象上调用setName()方法,设置name属性的值
setNameMethod.invoke(user, "Alice");
System.out.println(user.getName()); // 输出 "Alice"
}`
方法二:使用Field类的setAccessible()和set()方法;
`public class User {
private String name;
public void setName(String name) {
this.name = name;
}
}
public static void main(String[] args) throws Exception {
// 创建User对象
User user = new User();
// 获取name属性
Field nameField = User.class.getDeclaredField("name");
// 调用setAccessible()方法,使得可以访问name属性
nameField.setAccessible(true);
// 在User对象上调用setName()方法,设置name属性的值
nameField.set(user, "Alice");
System.out.println(user.getName()); // 输出 "Alice"
}`