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