List<String>使用反射修改
我有如下代码片段的列表:
List<String> nameList = new ArrayList<>();
nameList.add("Robert");
nameList.add("Tom");
nameList.add("Curran");
//robert, tom, curran
现在我想使用 Java 中的反射 API 修改这些列表值。如果我们打印列表,输出如下所示:
//xxx,xxx,xxx
回答
您可以使用 Java 反射实现这一点,如下所示:
包含的类nameList:
public class SampleClass {
List<String> nameList;
}
这是一个简单的测试方法,使用SampleClass:
@Test
public void testReflection() throws NoSuchFieldException, IllegalAccessException {
SampleClass sample= new SampleClass();
sample.nameList = new ArrayList<>();
sample.nameList.add("Robert");
sample.nameList.add("Tom");
sample.nameList.add("Curran");
Field fieldList = SampleClass.class.getDeclaredField("nameList");
fieldList.setAccessible(true);
List<String> listToModify = (List<String>) fieldList.get(sample);
for (int i =0;i<listToModify.size();i++) {
if(listToModify.get(i).equals("Robert"))
listToModify.set(i, "xxxxxx");
};
System.out.println(sample.nameList.get(0));
System.out.println(sample.nameList.get(1));
System.out.println(sample.nameList.get(2));
}
输出:
xxxxxx
Tom
Curran
注意:我不建议使用setAccessible(true),它会破坏 OOP 封装。