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

时间:2009-11-20 16:48:51

标签: 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);
    }
}

所以说我这样做:

SomeClass c = new SomeClass();
Object val = SomeClass.getInstanceField(c, "myField");

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

1 个答案:

答案 0 :(得分:33)

想出来。需要

field.setAccessible(true);