递归反射获取子类及祖先的属性及方法
public static List<String> getClassFieldAndMethod(Class<?> cur_class, Object object, List<String> dataT) {
Method metd = null;
String fdname = null;
List<String> data = dataT;
//属性
Field[] obj_fields = cur_class.getDeclaredFields();
for (Field field : obj_fields) {
field.setAccessible(true);
fdname = field.getName(); //得到字段名
//排除不需要的字段
if (!fdname.equals(POJO_SERIALVERSIONUID) && !fdname.equals(POJO_ID) && !fdname.equals(POJO_SENSORID)
&& !fdname.equals(POJO_SUBDATACLASSNAME) && !fdname.equals(POJO_RESTYPE) && !fdname.equals(POJO_SATENUM)
&& !fdname.equals(POJO_RESULTSTATE) && !fdname.equals(POJO_RATIO)) {
try {
metd = cur_class.getMethod(METHOD_GET + change(fdname), null);// 根据字段名找到对应的get方法,null表示无参数
String value = metd.invoke(object, null)+"".trim();
if(value == null || value.equals("")) {
value = DEFAULT_VALUE;
}
data.add(value);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
//方法
// Method[] methods = cur_class.getDeclaredMethods();
// for (Method method : methods) {
// method.setAccessible(true);
// System.out.println(class_name + ":" + method.getName());
// }
//递归调用父类属性
if (cur_class.getSuperclass() != null) {
getClassFieldAndMethod(cur_class.getSuperclass(), object, dataT);
}
return data;
}