JAVA--reflection tool class

package com.gildata.task.platform.common.util;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.*;

/**
 * 反射工具类
 *
 * @author: zhaoyl
 * @since: 2017年12月14日 上午9:03:07
 * @history:
 */
public class ReflectionUtilEX {

    /**
     * 获取某个对象的所有属性
     *
     * @param object
     * @return
     * @create: 2017年12月14日 上午9:03:43 zhaoyl
     * @history:
     */
    public static Field[] getAllFields(Object object) {
        Class<? extends Object> clazz = object.getClass();
        return getAllFields(clazz);
    }

    /**
     * 将实体类的集合转换成Map集合
     *
     * @param entityList
     * @return
     * @create: 2017年12月14日 上午9:06:11 zhaoyl
     * @history:
     */
    public static List<Map<String, Object>> convertEntityListToMapList(List<? extends Object> entityList) {
        if (null == entityList || entityList.size() <= 0) {
            return null;
        }
        List<Map<String, Object>> mapList = new ArrayList<>();
        for (Object t : entityList) {
            mapList.add(ReflectionUtilEX.convertEntityToMap(t));
        }
        return mapList;
    }

    /**
     * 将对象转换成Map
     *
     * @param obj
     * @return
     * @create: 2017年12月14日 上午9:11:56 zhaoyl
     * @history:
     */
    public static Map<String, Object> convertEntityToMap(Object obj) {
        if (null == obj) {
            return null;
        }
        Map<String, Object> map = new HashMap<>();
        try {
            Field[] fields = ReflectionUtilEX.getAllFields(obj);
            for (Field field : fields) {
                field.setAccessible(true);
                if (!"serialVersionUID".equals(field.getName())) {
                    map.put(field.getName(), field.get(obj));
                }
            }
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return map;
    }

    /**
     * 将Map转换成对象
     *
     * @return
     * @create: 2018年3月22日 下午1:45:23 zhaoyl
     * @history:
     */
    public static <T> T convertMapToEntity(Map<String, Object> map, Class<T> clazz) {
        try {
            T t = clazz.newInstance();
            Field[] fields = ReflectionUtilEX.getAllFields(clazz);
            for (Field field : fields) {
                field.setAccessible(true);
                String fieldName = field.getName();
                String fieldType = field.getType().getSimpleName();
                boolean isStatic = Modifier.isStatic(field.getModifiers());
                boolean isFinal = Modifier.isFinal(field.getModifiers());
                if (!"serialVersionUID".equals(fieldName) && !isStatic && !isFinal) {
                    field.set(t, convertFieldType(fieldType, map.get(fieldName)));
                }
            }
            return t;
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        }
        return null;
    }

    /* *
     * <p>Description: 获取对象的某个属性值</p>
     *
     * @author zhaoyl
     * @version v1.0
     * @date 2020-02-19 11:58
     * @params [target, fieldName]
     * @return java.lang.Object
     */
    public static Object getProperty(Object target, String fieldName) {
        try {
            Field[] fields = ReflectionUtilEX.getAllFields(target.getClass());
            for (Field field : fields) {
                field.setAccessible(true);
                if (fieldName.equals(field.getName())) {
                    return field.get(target);
                }
            }
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return null;
    }

    private static Field[] getAllFields(Class<?> clazz) {
        List<Field> fieldList = new ArrayList<>();
        while (clazz != null) {
            fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields())));
            clazz = clazz.getSuperclass();
        }
        Field[] fields = new Field[fieldList.size()];
        fieldList.toArray(fields);
        return fields;
    }

    private static Object convertFieldType(String type, Object obj) {
        if (null == obj || "".equals(obj)) {
            return null;
        }
        String str = obj.toString();
        if ("String".equals(type)) {
            return str;
        } else if ("Integer".equals(type)) {
            return Integer.parseInt(str);
        } else if ("Long".equals(type)) {
            return Long.parseLong(str);
        } else if ("Double".equals(type)) {
            return Double.parseDouble(str);
        } else if ("Float".equals(type)) {
            return Float.parseFloat(str);
        } else if ("Short".equals(type)) {
            return Short.parseShort(str);
        }
        return obj;
    }

  
}

Guess you like

Origin blog.csdn.net/CUITAO2305532402/article/details/111163809