通過反射給屬性賦值,可以使用以下步驟:
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()
方法獲取屬性的值。