使用 Java 反射可以动态地设置对象的属性值,包括 List 类型的属性。以下是一个示例代码,演示如何通过反射设置 List 类型的属性:
假设有一个类 Person,包含一个 List 类型的属性 names:
java
public class Person {
private List<String> names;
public List<String> getNames() {
return names;
}
public void setNames(List<String> 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<String> 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 属性的值,并且成功地访问了该属性的值。
测试打印结果