java怎么通过反射给属性赋值

avatar
作者
猴君
阅读量:0

通过反射给属性赋值,可以使用以下步骤:

  1. 获取类的Class对象:使用Class.forName()方法或者直接使用类名的.class属性获取类的Class对象。
  2. 获取属性对象:使用Class对象的getField()getDeclaredField()方法获取属性对象。getField()方法只能获取公共属性,而getDeclaredField()方法可以获取所有属性。
  3. 设置属性可访问性:如果属性是私有的,需要使用setAccessible(true)方法设置可访问性为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");                  // 创建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()方法获取属性的值。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!