通过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);