#java #рефлексия #rtti
Имеем класс 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); ??? } }
Ответы
Ответ 1
С помощью метода getDeclaredField получаем объект класса Field Изменяем поле с помощью вызова метода set у этого объекта Field field = c.getDeclaredField("имя_поля"); field.set(null, true /* новое значение */); Код на Ideone
Комментариев нет:
Отправить комментарий