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

23次阅读
没有评论

共计 1152 个字符,预计需要花费 3 分钟才能阅读完成。

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

  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() 方法获取属性的值。

丸趣 TV 网 – 提供最优质的资源集合!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-12发表,共计1152字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)