package com.yxcheng.token.utils;

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

public class MapUtil {
    /**
     * 对象转map
     * @param obj 对象
     * @return map
     * @throws IllegalAccessException 异常
     */
    public static Map<String, Object> objectToMap(Object obj) throws IllegalAccessException {

        if(obj == null){
            return null;
        }
        //获取所有字段，包含父类。
        List<Field> fieldList = new ArrayList<>() ;
        Class<?> tempClass = obj.getClass();
        while (tempClass !=null && !tempClass.getName().toLowerCase().equals("java.lang.object")) {//当父类为null的时候说明到达了最上层的父类(Object类).
            fieldList.addAll(Arrays.asList(tempClass .getDeclaredFields()));
            tempClass = tempClass.getSuperclass(); //得到父类,然后赋给自己
        }
        //反射，处理每个字段。
        Map<String, Object> map = new HashMap<>();
        for (Field field : fieldList) {
            field.setAccessible(true);
            String fieldName = field.getName();
            Object value = field.get(obj);
            map.put(fieldName, value);
        }

        return map;
    }
}
