通过反射访问Java中的私有变量

dcp*_*dcp 28 java reflection

我正在尝试编写一个方法,使用反射在类中获取私有字段.

这是我的课程(本例简化):

public class SomeClass {
    private int myField;

    public SomeClass() {
        myField = 42;
    }

    public static Object getInstanceField(Object instance, String fieldName) throws Throwable {
        Field field = instance.getClass().getDeclaredField(fieldName);
        return field.get(instance);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以说我这样做:

SomeClass c = new SomeClass();
Object val = SomeClass.getInstanceField(c, "myField");
Run Code Online (Sandbox Code Playgroud)

我得到的是IllegalAccessException因为myField是私人的.有没有办法使用反射获取/设置私有变量?(我在C#中完成了,但这是我第一次在Java中尝试过它).如果你想知道为什么需要做这样的疯狂:),这是因为有时在单元测试期间将私有变量设置为失败测试的伪值等是很方便的.

dcp*_*dcp 33

弄清楚了.需要

field.setAccessible(true);
Run Code Online (Sandbox Code Playgroud)

  • 请记住,如果有PermissionManager,这将不起作用 (3认同)