共計 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 網 – 提供最優質的資源集合!
正文完