Подтвердить что ты не робот

Получение значения открытого статического конечного поля/свойства класса в Java через отражение

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

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

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

4b9b3361

Ответ 1

Сначала извлеките свойство поля класса, затем вы можете получить значение. Если вы знаете тип, вы можете использовать один из методов get с нулевым значением (только для статических полей, фактически со статическим полем аргумент, переданный методу 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));
}...

Ответ 2

 R.class.getField("_1st").get(null);

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

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

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

Ответ 3

Я шел по тому же маршруту (просматривая сгенерированный класс R), и тогда у меня было это ужасное чувство, что это, вероятно, функция в классе Resources. Я был прав.

Найдено: Ресурсы:: getIdentifier

Думал, что это может спасти людей некоторое время. Хотя они говорят, что его обескураживают в документах, что не слишком удивительно.