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