溫馨提示×

java怎么通過反射給屬性賦值

小億
158
2023-11-13 21:14:30
欄目: 編程語言

通過反射給屬性賦值,可以使用以下步驟:

  1. 獲取類的Class對象:使用Class.forName()方法或者直接使用類名的.class屬性獲取類的Class對象。
  2. 獲取屬性對象:使用Class對象的getField()getDeclaredField()方法獲取屬性對象。getField()方法只能獲取公共屬性,而getDeclaredField()方法可以獲取所有屬性。
  3. 設(shè)置屬性可訪問性:如果屬性是私有的,需要使用setAccessible(true)方法設(shè)置可訪問性為true。
  4. 使用屬性對象的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");
        
        // 創(chuàng)建Person對象
        Person person = new Person();
        
        // 給name屬性賦值
        nameField.set(person, "John");
        
        // 獲取age屬性對象
        java.lang.reflect.Field ageField = personClass.getDeclaredField("age");
        
        // 設(shè)置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)方法設(shè)置其可訪問性為true,然后才能給age屬性賦值。最后通過name屬性和ageField.getInt()方法獲取屬性的值。

0