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; 
 | 
    } 
 | 
  
 | 
} 
 |