使用Java的反射&x27;s getDeclaredField
我有一个Java通用方法,使用反射获取字段值:使用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
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