Я пытаюсь получить значение поля через отражение. Проблема в том, что я не знаю тип поля и должен решить его при получении значения.
Этот код приводит к этому исключению:
Не удается установить для поля java.lang.String поле com .... fieldName значение java.lang.String
Field field = object.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
Class<?> targetType = field.getType();
Object objectValue = targetType.newInstance();
Object value = field.get(objectValue);
Я пытался выполнить кастинг, но получаю ошибки компиляции:
field.get((targetType)objectValue)
или
targetType objectValue = targetType.newInstance();
Как я могу это сделать?
java
reflection
Идо Бараш
источник
источник
field.get()
должен бытьobject
, а неobjectValue
.Ответы:
Как уже было сказано ранее, вы должны использовать:
Другой способ, который иногда предпочитают, - это динамический вызов геттера. пример кода:
Также имейте в виду, что когда ваш класс наследуется от другого класса, вам необходимо рекурсивно определить поле. например, чтобы получить все поля данного класса;
источник
BaseValidationObject
?object
класса нет методаgetMethods()
. Любой совет?Вы должны передать объект, чтобы получить метод поля , поэтому
источник
object.getClass()
вернет вам этот объект класса)object
во фрагменте не определен, поэтому читатели не могут понять, как его использовать.object
означает наш целевой объект / экземпляр, с которым мы работаем. Я думаю, что читателей на самом деле совершенно устраивает то, что содержитсяobject
в этом ответе.Я использую отражения в реализации toString () моего класса предпочтений, чтобы увидеть члены и значения класса (простая и быстрая отладка).
Упрощенный код, который я использую:
Я надеюсь, что это кому-то поможет, потому что я тоже искал.
источник
Хотя мне не совсем понятно, чего вы пытаетесь достичь, я обнаружил очевидную ошибку в вашем коде:
Field.get()
ожидает объект, который содержит поле в качестве аргумента, а не какое-то (возможное) значение этого поля. Так и должно бытьfield.get(object)
.Поскольку вы, похоже, ищете значение поля, вы можете получить его как:
Нет необходимости создавать экземпляр типа поля и создавать какое-то пустое / значение по умолчанию; или, может быть, я что-то упустил.
источник
object
не определено, читатели не могут понять, как применить ответ.источник
Вы призываете получить неправильный аргумент.
Так должно быть:
источник
object
не определено, читатели не могут понять, как применить пример в ответеЯ публикую свое решение в Kotlin, но оно также может работать с java-объектами. Я создаю расширение функции, чтобы любой объект мог использовать эту функцию.
Взгляните на эту веб-страницу: https://www.geeksforgeeks.org/field-get-method-in-java-with-examples/
источник
источник