Java 反射设置List属性

使用 Java 反射可以动态地设置对象的属性值,包括 List 类型的属性。以下是一个示例代码,演示如何通过反射设置 List 类型的属性:

假设有一个类 Person,包含一个 List 类型的属性 names:

java

public class Person {  
    private List names;

    public List getNames() {
        return names;
    }

    public void setNames(List names) {
        this.names = names;
    }
}

现在,我们使用反射来动态地设置 Person 对象的 names 属性:

import java.lang.reflect.Field;  
import java.util.ArrayList;  
import java.util.List;  
  
public class Main {  
    public static void main(String[] args) throws Exception {
        Person person = new Person();
        Class clazz = person.getClass();
        // 获取 names 属性对应的 Field 对象
        Field field = clazz.getDeclaredField("names");
        // 设置属性可访问性为 true,以避免访问权限问题
        field.setAccessible(true);
        List names = new ArrayList<>();
        names.add("Alice");
        names.add("Bob");
        // 设置 names 属性的值为新的 List 对象,注意要使用 field.set() 方法来设置属性值,而不是直接使用 names = person.names = names; 的形式赋值
        field.set(person, names);
        // 输出 [Alice, Bob]
        System.out.println(person.getNames());
    }
}

在上面的代码中,我们首先创建了一个 Person 对象,然后获取了该对象的 Class 对象。接着,我们通过调用 Class 对象的 getDeclaredField() 方法获取了 names 属性对应的 Field 对象,并将属性的可访问性设置为 true,以确保我们可以访问该属性。接下来,我们创建了一个新的 List 对象,并将两个字符串添加到列表中。最后,我们通过调用 Field 对象的 set() 方法将新的 List 对象设置为 names 属性的值。在输出结果中可以看到,我们已经成功地设置了 names 属性的值,并且成功地访问了该属性的值。

测试打印结果

Java 反射设置List属性_第1张图片

你可能感兴趣的:(Java,java,list,反射)