使用Java的getDeclaredField进行反思

时间:2015-04-27 09:11:56

标签: 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 {
        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")

2 个答案:

答案 0 :(得分:1)

简单的解决方案是编写一些代码将"task.title"拆分为组件(例如使用String.split(...)),然后将getFieldValue个调用序列链接在一​​起。

答案 1 :(得分:0)

使用apache bean util: http://www.java2s.com/Code/Java/Apache-Common/UseBeanUtilstogetpropertyvaluefromobject.htm

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