Страницы

Поиск по вопросам

понедельник, 18 февраля 2019 г.

RTTI. Как обратить к статическому полю класса, имея объект Class для него?

Имеем класс Allocator, который имеет метод allocate(Class). Как без знания того, объект Class какого класса пришёл, вытащить из него поле с возможностью его изменить?
Вариант с использованием objOFclassClass.newInstance() не подойдёт. Охота без лишних затрат памяти на создание объекта обойтись.
class X { public static boolean f = false; }
class Y { public static boolean f = false; }
class Z { public static boolean f = false; }
class Allocator { public static void allocate (Class c) throws Exception{ // Предполагая, что (c.name == "X" или "Y" или "Z"), как сделать что то в духе: // c.setStaticField("f",true); ??? } }


Ответ

С помощью метода getDeclaredField получаем объект класса Field Изменяем поле с помощью вызова метода set у этого объекта

Field field = c.getDeclaredField("имя_поля"); field.set(null, true /* новое значение */);
Код на Ideone

Комментариев нет:

Отправить комментарий