У меня есть универсальный метод Java, чтобы получить значение поля в, с помощью отражения:Reflection с помощью getDeclaredField Явы
private static Object getFieldValue(Object object, final String fieldName) {
if (null == object) {
return null;
}
Class<?> clazz = object.getClass();
while (clazz != null) {
try {
Field field = clazz.getDeclaredField(fieldName);
field.setAccessible(true);
try {
return field.get(object);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} catch (NoSuchFieldException e) {
clazz = clazz.getSuperclass();
}
}
return null;
}
Это прекрасно работает для простых имен полей, например:
getfieldValue (project, "title")
Я хочу получить значения из полей связанных объектов, например:
getfieldValue (project, "task.title")
Еще одно замечание - ваш код работает, но вы также можете рассмотреть возможность использования интроспекции (BeanInfo), это альтернативный способ извлечь поля с небольшими вариациями (например, он автоматически знает, что логическое поле может иметь «isXXX» вместо getXXX). Он не работает рекурсивно, поэтому лучше использовать Apache beanUtils –