Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpRfFc 134 of 322 menu
◀ ▶

Изменение поля в Java

Рефлексия позволяет менять поле там, где обычный код не имеет доступа. Пара setAccessible и set работает и для закрытых полей, но такой приём стоит применять осознанно: он обходит правила инкапсуляции.

Метод set принимает экземпляр и новое значение. Для открытого поля:

import java.lang.reflect.Field; class Gauge { public int level = 1; } public class Main { public static void main(String[] args) throws Exception { Gauge unit = new Gauge(); Field levelField = Gauge.class.getField("level"); levelField.set(unit, 5); System.out.println(unit.level); } }

Закрытое поле меняют так же, но сначала открывают доступ и берут поле через getDeclaredField:

import java.lang.reflect.Field; class Gauge { private int level = 1; int level() { return level; } } public class Main { public static void main(String[] args) throws Exception { Gauge unit = new Gauge(); Field levelField = Gauge.class.getDeclaredField("level"); levelField.setAccessible(true); levelField.set(unit, 5); System.out.println(unit.level()); } }

Тип нового значения должен подходить полю. Для примитивов передают соответствующий объект-обёртку или значение, которое автоматически упакуется при вызове set.

Класс Slot содержит закрытое поле code типа String. Установите ему значение "beta" средствами рефлексии и выведите результат через публичный метод доступа, если он есть, или снова.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить