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

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

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

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

Сначала извлеките свойство поля classа, затем вы можете получить значение. Если вы знаете тип, вы можете использовать один из методов 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)); }... 
  R.class.getField("_1st").get(null); 

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

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

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

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

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

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

  • Область статической переменной в многопользовательском веб-приложении ASP.NET
  • Являются ли статические члены общего classа привязаны к конкретному экземпляру?
  • Каково точное значение статических полей в Java?
  • Какая правильная альтернатива статическому наследованию метода?
  • Вызов статических общих методов
  • Добавление статического libcurl в Code :: Blocks IDE
  • Безопасны ли streamи статических методов
  • Почему допустимая статическая конечная переменная не разрешена в статическом блоке инициализации?
  • Пожизненная статическая переменная ASP.NET
  • Возможны ли переменные статического classа?
  • Модификатор static разрешен только в объявлениях с постоянной переменной
  • Interesting Posts

    База данных с предварительным заполнением Android

    Назначение объектов в VB6

    Как удалить разрывы строк из файла в Java?

    Как загружать чтение программы stdin и принимать параметры в gdb?

    Как включить и использовать новые шрифты в iPhone SDK?

    Почему моя микроволновая печь убивает Wi-Fi?

    Печать на беспроводной принтер отключает нетбук от маршрутизатора

    C # – Заполните поле со списком с помощью DataTable

    Реализация SMTP-сервера на персональном компьютере (Windows)

    Как я могу автоматически копировать файлы на USB-накопитель, когда я подключаю его к компьютеру?

    Могу ли я сделать резервную копию своего ПК, а затем спать по требованию с помощью WHS?

    Почему медленная инструкция цикла? Не удалось ли Intel эффективно внедрить его?

    Asp.net WEB API – Какие проблемы могут возникнуть, если я использую POST вместо PUT и DELETE?

    Проверьте, содержит ли строка ни одну из строк из массива

    Как обновить пользовательский интерфейс в BroadcastReceiver

    Давайте будем гением компьютера.