阅读量:0
通过反射给属性赋值,可以使用以下步骤:
- 获取类的Class对象:使用
Class.forName()
方法或者直接使用类名的.class
属性获取类的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()
方法获取属性的值。