通过反射获取类的所有字段,包括父类。因为getDeclaredFields()获取的只是当前类的字段,获取不到父类里的字段,可以通过getSuperclass()获取父类,再通过etDeclaredFields()将获取到的字段保存到一个集合里返回。
/**
* 获取所有字段
* @param clazz
* @return
*/
public static Field[] getFields(Class clazz){
List<Field> fieldList = new ArrayList<>(16);
while (clazz != null){
Field[] fields = clazz.getDeclaredFields();
fieldList.addAll(Arrays.asList(fields));
clazz = clazz.getSuperclass();
}
Field[] f = new Field[fieldList.size()];
return fieldList.toArray(f);
}