Страницы

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

четверг, 9 января 2020 г.

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

#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

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

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