共计 1152 个字符,预计需要花费 3 分钟才能阅读完成。
通过反射给属性赋值,可以使用以下步骤:
- 获取类的 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()
方法获取属性的值。
丸趣 TV 网 – 提供最优质的资源集合!
正文完