Change private static final field using Java reflectionAndroid: изменение частного статического окончательного поля с помощью Java Reflection
Я следовал инструкциям в приведенной выше ссылке, чтобы изменить личное статическое последнее поле с помощью Java Reflection. У меня есть объект с именем «data». Внутри «данных» есть частная статическая конечная переменная с именем «type». Я хочу установить «тип» равным нулю. Вот мой код.
Field field = data.getClass().getDeclaredField("type");
field.setAccessible(true);
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(data, null);
Я попытался сделать это на Java 1.7 с похожим кодом, и он сработал. Но работает этот код на Android выдает следующее сообщение об ошибке: java.lang.NoSuchFieldException: модификаторы
Я думаю «модификаторы» не является полем в классе Field на Android.
Как исправить это?
Вы ... не можете изменить _modifiers в поле класса_ в _runtime._ –
Я могу по этой ссылке. – jas7
Помните, что компилятор Java может встроить значения примитивных статических конечных полей. Выполнение такого рода магии отражения может привести к причудливому поведению. – millimoose