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