若要查看某个类是否具有不依赖于异常的属性,可以使用以下方法:
private Boolean objectHasProperty(Object obj, String propertyName){
List<Field> properties = getAllFields(obj);
for(Field field : properties){
if(field.getName().equalsIgnoreCase(propertyName)){
return true;
}
}
return false;
}
private static List<Field> getAllFields(Object obj){
List<Field> fields = new ArrayList<Field>();
getAllFieldsRecursive(fields, obj.getClass());
return fields;
}
private static List<Field> getAllFieldsRecursive(List<Field> fields, Class<?> type) {
for (Field field: type.getDeclaredFields()) {
fields.add(field);
}
if (type.getSuperclass() != null) {
fields = getAllFieldsRecursive(fields, type.getSuperclass());
}
return fields;
}
只需调用:
objectHasProperty(objInstance, "myPropertyName");
事实上,类的实例并不重要,看看类是否具有属性,但我这样做了,只是为了更友好一点。总结一下:我使getAllFields成为递归的,也得到了所有的超类方法(在我的情况下,这很重要)
之后,如果要查看所需对象中属性的值,只需调用:
PropertyUtils.getProperty(objInstance, "myPropertyName");
请记住:如果没有该属性,上面的调用将引发(这就是为什么您需要使用first代码来查看该类是否具有该属性)objInstance
NoSuchMethodException