Получение значения общедоступного статического заключительного поля/свойства класса в Java через отражение

Скажите, что у меня есть класс:

public class R {
    public static final int _1st = 0x334455;
}

Как я могу получить значение "_1st" через отражение?

86
задан Hearen 21 March 2019 в 00:11
поделиться

2 ответа

Сначала получите свойство поля класса, затем вы можете получить значение. Если вам известен тип, вы можете использовать один из методов get со значением null (только для статических полей, фактически со статическим полем аргумент, переданный методу get, полностью игнорируется). В противном случае вы можете использовать getType и написать соответствующий переключатель, как показано ниже:

Field f = R.class.getField("_1st");
Class<?> t = f.getType();
if(t == int.class){
    System.out.println(f.getInt(null));
}else if(t == double.class){
    System.out.println(f.getDouble(null));
}...
118
ответ дан 24 November 2019 в 08:00
поделиться
 R.class.getField("_1st").get(null);

Обработка исключений оставлена ​​в качестве упражнения для читателя.

В основном вы получаете поле, как и любое другое, через отражение, но когда вы вызываете метод get, вы передаете значение null, поскольку нет экземпляра, с которым можно было бы действовать.

Это работает для всех статических полей, независимо от того, являются ли они окончательными. Если поле не является общедоступным, вам нужно сначала вызвать для него setAccessible (true) , и, конечно же, SecurityManager должен разрешить все это.

61
ответ дан 24 November 2019 в 08:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: