2015-04-27 4 views
-1

У меня есть универсальный метод 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") 

ответ

0

Использование Apache боба Util: http://www.java2s.com/Code/Java/Apache-Common/UseBeanUtilstogetpropertyvaluefromobject.htm

Очевидно, что вы можете написать свой собственный код (разделить строку, такую ​​как «task.title», и рекурсивно использовать ваш getField. Но это уже есть в коде Apache.

+0

Еще одно замечание - ваш код работает, но вы также можете рассмотреть возможность использования интроспекции (BeanInfo), это альтернативный способ извлечь поля с небольшими вариациями (например, он автоматически знает, что логическое поле может иметь «isXXX» вместо getXXX). Он не работает рекурсивно, поэтому лучше использовать Apache beanUtils –

1

Простым решением было бы написать код для разделения "task.title" на компоненты (например, с использованием String.split(...)), а затем объединить последовательность вызовов getFieldValue.

Смежные вопросы