|  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 获取指定Class(及其SuperClass)的成员变量 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public static Field[] getAllFields(Class<?> cls){ | 
|---|
|  |  |  | public static Field[] getAllFields(Class<?> cls) { | 
|---|
|  |  |  | return getAllFields(cls, null); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 递归合并基类Field | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private static Field[] getAllFields(Class<?> cls, Field[] params){ | 
|---|
|  |  |  | private static Field[] getAllFields(Class<?> cls, Field[] params) { | 
|---|
|  |  |  | Field[] fields = (params == null) ? cls.getDeclaredFields() : params; | 
|---|
|  |  |  | Class<?> superCls = cls.getSuperclass(); | 
|---|
|  |  |  | if (superCls == null || superCls == Object.class){ | 
|---|
|  |  |  | if (superCls == null || superCls == Object.class) { | 
|---|
|  |  |  | return fields; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Field[] superClsFields = superCls.getDeclaredFields(); | 
|---|
|  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 删除Field数组的静态成员变量 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public static Field[] removeStaticField(Field[] params){ | 
|---|
|  |  |  | public static Field[] removeStaticField(Field[] params) { | 
|---|
|  |  |  | List<Field> fields = new ArrayList<>(Arrays.asList(params)); | 
|---|
|  |  |  | if (fields.size() == 0){ | 
|---|
|  |  |  | if (fields.size() == 0) { | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | for (int i = fields.size() - 1; i >= 0; i--) { | 
|---|
|  |  |  | if(fields.get(i) == null){ | 
|---|
|  |  |  | if (fields.get(i) == null) { | 
|---|
|  |  |  | fields.remove(i); | 
|---|
|  |  |  | } else if (Modifier.isStatic(fields.get(i).getModifiers())) { | 
|---|
|  |  |  | fields.remove(i); | 
|---|
|  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 递归获取成员变量对象(包含其基类) | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public static Field getField(Class<?> cls, String fieldName){ | 
|---|
|  |  |  | public static Field getField(Class<?> cls, String fieldName) { | 
|---|
|  |  |  | Field field; | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | field = cls.getDeclaredField(fieldName); | 
|---|
|  |  |  | } catch (NoSuchFieldException e) { | 
|---|
|  |  |  | Class<?> superCls = cls.getSuperclass(); | 
|---|
|  |  |  | if (superCls == null || superCls == Object.class){ | 
|---|
|  |  |  | if (superCls == null || superCls == Object.class) { | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return getField(superCls, fieldName); | 
|---|