通过反射给属性赋值,可以使用以下步骤:
Class.forName()方法或者直接使用类名的.class属性获取类的Class对象。getField()或getDeclaredField()方法获取属性对象。getField()方法只能获取公共属性,而getDeclaredField()方法可以获取所有属性。setAccessible(true)方法设置可访问性为true。set()方法给属性赋值。以下是一个简单的例子:
class Person {
public String name;
private int age;
public void setName(String name) {
this.name = name;
}
private void setAge(int age) {
this.age = age;
}
}
public class Main {
public static void main(String[] args) throws Exception {
// 获取Person类的Class对象
Class<?> personClass = Class.forName("Person");
// 获取name属性对象
java.lang.reflect.Field nameField = personClass.getField("name");
// 创建Person对象
Person person = new Person();
// 给name属性赋值
nameField.set(person, "John");
// 获取age属性对象
java.lang.reflect.Field ageField = personClass.getDeclaredField("age");
// 设置age属性可访问性为true
ageField.setAccessible(true);
// 给age属性赋值
ageField.set(person, 20);
System.out.println(person.name); // 输出: John
System.out.println(ageField.getInt(person)); // 输出: 20
}
}
在上面的例子中,首先使用Class.forName()方法获取Person类的Class对象。然后使用getField()方法获取name属性对象并给其赋值。接着使用getDeclaredField()方法获取age属性对象,并使用setAccessible(true)方法设置其可访问性为true,然后才能给age属性赋值。最后通过name属性和ageField.getInt()方法获取属性的值。