Могу ли я получить доступ к переменным stati c объекта 'Class'? - PullRequest
7 голосов
/ 09 июля 2020

Имея этот метод:

readAllTypes(Class clazz) {...}

Могу ли я получить доступ к переменным stati c класса?

Ответы [ 2 ]

10 голосов
/ 09 июля 2020

Да. Просто используйте Class.getDeclaredFields() (или Class.getDeclaredField(String)) как обычно, а для получения значений используйте методы Field.getXyz(), передавая null для параметра obj.

Пример кода:

import java.lang.reflect.Field;

class Foo {
    public static int bar;
}

class Test {
    public static void main(String[] args)
        throws IllegalAccessException, NoSuchFieldException {

        Field field = Foo.class.getDeclaredField("bar");
        System.out.println(field.getInt(null)); // 0
        Foo.bar = 10;
        System.out.println(field.getInt(null)); // 10
    }
}
1 голос
/ 09 июля 2020

Вы можете найти поле, используя clazz.getDeclaredFields(), который возвращает Field[], или напрямую получая поле по имени с clazz.getDeclaredField("myFieldName"). Это может вызвать NoSuchFieldException.

После того, как вы это сделаете, вы можете получить значение поля с помощью field.get(null), если поле представляет объект, или с помощью field.getInt(null), field.getDouble(null), et c. если это примитив. Чтобы проверить тип поля, используйте getType или getGenericType. Они могут выдать IllegalAccessException, если они не публикуются c, и в этом случае вы можете сначала использовать field.setAccessible(true). Вы также можете установить поля таким же образом, если просто замените «get» на «set».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...