В основном проблема заключается в вашем служебном методе, который предполагает, что у вас есть экземпляр. Установить частное статическое поле достаточно просто - это точно такая же процедура, что и для поля экземпляра, за исключением того, что вы указываете null
в качестве экземпляра. К сожалению, ваш служебный метод использует экземпляр для получения класса и требует, чтобы он был ненулевым ...
Я бы повторил предостережение Тома: не делай этого. Если вы управляете этим классом, я бы создал метод уровня пакета:
void setFooForTesting(Bar newValue)
{
foo = newValue;
}
Однако вот полный пример, если вы действительно, действительно хотите установить его с отражением:
import java.lang.reflect.*;
class FieldContainer
{
private static String woot;
public static void showWoot()
{
System.out.println(woot);
}
}
public class Test
{
// Declared to throw Exception just for the sake of brevity here
public static void main(String[] args) throws Exception
{
Field field = FieldContainer.class.getDeclaredField("woot");
field.setAccessible(true);
field.set(null, "New value");
FieldContainer.showWoot();
}
}