#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
Комментариев нет:
Отправить комментарий