Android: изменение частного статического финального поля с использованием java отражения

Изменить частное статическое конечное поле с помощью отражения Java

Я следовал инструкциям, приведенным в ссылке выше, чтобы изменить частное статическое конечное поле, используя отражение Java. У меня есть объект с именем & quot; данные. & Quot; Внутри & quot; данные & quot; есть частная статическая конечная переменная с именем & quot; тип. & quot; Я хочу установить & quot; тип & quot; быть нулевым. Вот мой код

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: modifiers

Я думаю, "модификаторы" не является полем в классе Field в Android.

Как это исправить?

 millimoose27 июн. 2012 г., 22:28
Помните, что компилятор Java может встроить значения примитивных статических полей final. Использование такого рода магии отражения может привести к странному поведению.
 jas725 июн. 2012 г., 21:21
Я могу по этой ссылке.
 Louis Wasserman25 июн. 2012 г., 10:26
Вы ... не можете изменитьmodifiers on a class field вruntime.

Ответы на вопрос(1)

Решение Вопроса

Field field = data.getClass().getDeclaredField("type");
field.setAccessible(true);
field.set(data, null);
 16 мар. 2016 г., 10:08
Это работает, потому что первый объект вfield.set(...) функция - это объект, который нужно изменить, а НЕ поле
 09 авг. 2017 г., 03:36
данные не статичны в этом случае?
 28 февр. 2016 г., 18:09
Это сработало. Но почему? Удаляет ли ART окончательный модификатор или он все равно позволяет получить к нему доступ?

Ваш ответ на вопрос