Итак, я создал класс ReflectUtil
с некоторыми полезными методами, которые позволяют мне быстро и просто получить доступ к API отражения java. Основанный на this метод forceCall
может изменить значение частного и конечного поля.
Этот пример работает абсолютно нормально:
ReflectUtil.forceCall(Boolean.class, null, "FALSE", true);
System.out.println(String.format("Everything is %s", false));
Вывод: Everything is true
(так что мой метод работает).
Но это просто не работает (это также не работает, если я пробую это без моего класса ReflectUtil):
public class JustForTestingPurposes {
private static final String field = "no";
public static void main(String[] args) throws Exception {
ReflectUtil.forceCall(JustForTestingPurposes.class, null, "field", "yes");
System.out.println(String.format("Is this working? %s", field));
}
}
Вывод: Is this working? no
Я подумал, может быть, это из-за способа, которым java присваивает значения, поэтому я добавил 1 se c sleep перед выполнением кода в основном методе, без успех.