Вы понимаете концепцию кастинга? Кастинг - это процесс преобразования типов, который в Java очень распространен, потому что это статически типизированный язык. Некоторые примеры:
Вставить строку «1» в int -> no problem
Вставить строку «abc» в int -> вызывает ClassCastException
Или подумайте о диаграмме классов с Animal.class, Dog.class и Cat.class
Animal a = new Dog();
Dog d = (Dog) a; // No problem, the type animal can be casted to a dog, because its a dog.
Cat c = (Dog) a; // Raises class cast exception; you can't cast a dog to a cat.
Сначала найдите свойство поля класса, затем вы можете получить значение. Если вы знаете тип, вы можете использовать один из методов 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), и тогда у меня было это ужасное чувство, что это, вероятно, функция в классе Resources. Я был прав.
Найдено: Ресурсы :: getIdentifier
Думал, что это может спасти людей некоторое время. Хотя они говорят, что его обескураживают в документах, что не слишком удивительно.
R.class.getField("_1st").get(null);
Обработка исключений оставлена как упражнение для читателя.
В основном вы получаете поле, как любое другое через отражение, но когда вы вызываете метод get, вы передаете нуль, поскольку существует нет экземпляра для работы.
Это работает для всех статических полей, независимо от их окончательности. Если поле не является общедоступным, сначала необходимо вызвать setAccessible(true)
, и, конечно, SecurityManager должен разрешить все это.
getInt()
игнорирует переданный в аргументе? Проводили часы, пытаясь получить туда экземпляр класса. – Sevastyan 8 November 2017 в 17:11