通过reflection访问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是私有的。 有没有办法使用reflection获取/设置私有变量? (我是用C#完成的,但这是我第一次用Java编写它)。 如果你想知道为什么需要做这样的疯狂:),这是因为有时在unit testing期间将私有变量设置为失败测试的伪值等是很方便的。

弄清楚了。 需要

 field.setAccessible(true);