| package com.zy.common.utils; | 
|   | 
| import com.core.common.Cools; | 
|   | 
| import java.lang.reflect.Field; | 
| import java.lang.reflect.Modifier; | 
| import java.util.ArrayList; | 
| import java.util.Arrays; | 
| import java.util.List; | 
|   | 
| /** | 
|  * 反射工具类 | 
|  * Created by vincent on 2019/1/3 | 
|  */ | 
| public class ReflectUtils { | 
|   | 
|     /** | 
|      * 获取指定Class(及其SuperClass)的成员变量 | 
|      */ | 
|     public static Field[] getAllFields(Class<?> cls){ | 
|         return getAllFields(cls, null); | 
|     } | 
|   | 
|     /** | 
|      * 递归合并基类Field | 
|      */ | 
|     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){ | 
|             return fields; | 
|         } | 
|         Field[] superClsFields = superCls.getDeclaredFields(); | 
|         fields = Cools.addAll(fields, superClsFields); | 
|         return getAllFields(superCls, fields); | 
|     } | 
|   | 
|     /** | 
|      * 删除Field数组的静态成员变量 | 
|      */ | 
|     public static Field[] removeStaticField(Field[] params){ | 
|         List<Field> fields = new ArrayList<>(Arrays.asList(params)); | 
|         if (fields.size() == 0){ | 
|             return null; | 
|         } | 
|         for (int i = fields.size() - 1; i >= 0; i--) { | 
|             if(fields.get(i) == null){ | 
|                 fields.remove(i); | 
|             } else if (Modifier.isStatic(fields.get(i).getModifiers())) { | 
|                 fields.remove(i); | 
|                 i++; | 
|             } | 
|         } | 
|         return fields.toArray(new Field[0]); | 
|     } | 
|   | 
|     /** | 
|      * 递归获取成员变量对象(包含其基类) | 
|      */ | 
|     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){ | 
|                 return null; | 
|             } | 
|             return getField(superCls, fieldName); | 
|   | 
|         } | 
|         return field; | 
|     } | 
|   | 
| } |