使用Java的反射&x27;s getDeclaredField

使用Java的反射&x27;s getDeclaredField,java,reflection,Java,Reflection,我有一个Java通用方法,使用反射获取字段值: private static Object getFieldValue(Object object, final String fieldName) { if (null == object) { return null; } Class<?> clazz = object.getClass(); while (clazz != null) { try { Fi

我有一个Java通用方法,使用反射获取字段值:

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")
使用apachebean util:


显然,您可以编写自己的代码(拆分一个字符串,如“task.title”,并递归使用getField。但它已经存在于apache的代码中。

简单的解决方案是编写一些代码,将
“task.title”
拆分为组件(例如,使用
string.split(…)
)然后将一系列的<代码> GETFieldValue>代码>调用.< /P>另一个注释——你的代码工作,但是你也可以考虑使用自省(BeaNeFipe),这是一种替代的方法来提取字段,并有微小的变化(例如,它自动地知道布尔字段可能有“ISXXX”而不是GETXXX)。.它不能递归地工作,所以最好还是使用Apache beanUtils