Как поменять значение приватного finall поля на другое

В первую очередь нужно знать, что такое действие слишком плохая практика, противоречащая принципу сокрытия информации. Для того чтобы это сделать нужно обратиться к Reflection API.

Для этого нужно:

·        чтобы получить дескриптор нужного поля, вызываем метод getDeclaredField() у метакласса Class<X>, относящемуся к нужному нам классу;

·        сделать полученный нами экземпляр доступным используя метода setAccessible(true);

·        для доступа к методам используются методы get*() и set*(), поскольку Field не привязан к конкретному экземпляру, то экземпляр нужно передать в качестве параметра (если поле статическое передаётся null);

Чтобы убрать модификатор final также используется Reflection API. Модификаторы находятся в поле modifiers, полученного ранее дескриптора field. Также как и при изменении параметра, сначала открываем доступ к модификатору, а потом меняем его. Но данные в modifiers хранятся побитово, то есть как набор битов. Для изменения нужного модификатора final нужно использовать побитовые операторы.

Ниже показано как для объекта myObject изменить значение поля myField на 42.

Field field = myObject.class.getDeclaredField( "myField" );
field.setAccessible( true );
Field modifiersField = Field.class.getDeclaredField( "modifiers" );
modifiersField.setAccessible( true );
modifiersField.setInt( field, field.getModifiers() & ~Modifier.FINAL );
field.setInt(myObject, 42);

Peer-to-peer собеседования

Обучающая платформа AndroidSprint

Практика собеседований с менторами и другими студентами. Реальные вопросы по Kotlin, Android и Backend

  • Живые собеседования: практикуйте интервью с менторами и коллегами-студентами
  • Реальные вопросы: база вопросов по Kotlin, Android, Backend и QA
  • Фидбек: обратная связь после каждого собеседования — знаете, что улучшить
Попробовать собеседование →
Peer-to-peer собеседования AndroidSprint — обучающая платформа
Попробовать собеседование →

Бесплатная диагностика с сениор разработчиком

Запишитесь на консультацию — перезвоним в рабочие часы

Или свяжитесь удобным способом

Вам также может быть интересно

Узнать подробнее
Курс AndroidSprint

Глубокое обучение Android разработке с 0 до получения оффера. Только персональная практика с гарантией получения продуктового опыта.

Курс AndroidSprint - Глубокое <strong>обучение Android разработке с 0 до получения оффера</strong>. Только персональная практика с гарантией получения продуктового опыта.
Узнать подробнее
Узнать подробнее
Практикум по Kotlin

Изучение Котлин с 0 для профессиональной разработки. Личный ментор и разбор кода задач через git-flow.

Практикум по Kotlin - Изучение Котлин <strong>с 0 для профессиональной разработки</strong>. Личный ментор и разбор кода задач через git-flow.
Узнать подробнее
Узнать подробнее
Бесплатные уроки по Kotlin разработке

Самостоятельное освоение базы по языку для дальнейшего развития в Android/back-end разработке или в автотестах.

Бесплатные уроки по Kotlin разработке - <span>Самостоятельное освоение базы по языку для дальнейшего развития в Android/back-end разработке или в автотестах.</span>
Узнать подробнее
Узнать подробнее
Onboarding в разработку

Полное обучение Android разработке с нуля до получения оффера. Делаем упор на практику и обратную связь

Onboarding в разработку - <span>Полное обучение Android разработке с нуля до получения оффера. Делаем упор на практику и обратную связь</span>
Узнать подробнее
Узнать подробнее
Обучающий Kotlin телеграм бот (с тестами)

Ваш основной инструмент для изучения основ языка. Бесплатные тесты и практика внутри.

Обучающий Kotlin телеграм бот (с тестами) - Ваш основной <span>инструмент для изучения основ языка.</span> Бесплатные тесты и практика внутри.
Узнать подробнее
Узнать подробнее
Бесплатные уроки по Android разработке

Самостоятельное обучение разработке Андроид приложений. Понятные видеоуроки с разжеванными примерами.

Бесплатные уроки  по Android разработке - Самостоятельное <span>обучение разработке Андроид приложений.</span> Понятные видеоуроки с разжеванными примерами.
Узнать подробнее
Узнать подробнее
Курс по UI/Unit тестированию

Для ручных тестировщиков, которые готовы осваивать автотесты с использованием актуального стека технологий. [в разработке]

Курс по UI/Unit тестированию - Для ручных тестировщиков, которые <span>готовы осваивать автотесты</span> с использованием актуального стека технологий. [в разработке]
Узнать подробнее
Узнать подробнее
Обучающий Android телеграм бот (с тестами)

Бесплатные теоретические тесты для самопроверки. А также информер на практических спринтах по Android.

Обучающий Android телеграм бот (с тестами) - Бесплатные <span>теоретические тесты для самопроверки.</span> А также информер на практических спринтах по Android.
Узнать подробнее
ИИ-ментор код-ревью и голосовые собесы
Открыть