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 封装。


以上是List&lt;String&gt;使用反射修改的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>