| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 | package J20250806.reflection;import java.lang.reflect.Field;import java.lang.reflect.Modifier;import java.util.HashMap;import java.util.HashSet;import java.util.Map;import java.util.Set;/** * @author WanJl * @version 1.0 * @title ObjectToMapConverter * @description * @create 2025/8/6 */public class ObjectToMapConverter {    /**     * 将对象转换为Map,非静态成员变量作为Key,成员变量值为Value     *     * @param obj          要转换的对象     * @param ignoreFields 要忽略的成员变量名     * @return 转换后的Map     */    public Map<String, Object> toMap(Object obj, String... ignoreFields) throws IllegalAccessException {        HashMap<String, Object> map = new HashMap<>();        //获取对象的Class对象        Class<?> clazz = obj.getClass();        //最外层循环,找当前对象的所有成员变量以及当前对象父类对象的所有成员变量        //只要这个对象实际上不是Object类型的,不是空的,那么就会一直获取父类对象,执行循环        while (clazz!=null&clazz!=Object.class) {            //判空            if (obj == null) {                throw new NullPointerException("输入的对象不能为null");            }            //创建要忽略的成员变量的集合,方便我们查找            Set<String> ignoreSet = new HashSet<>();            for (String field : ignoreSet) {                //如果这个被忽略的成员变量不是空的就放进忽略集合                if (field != null && !field.trim().isEmpty()) {                    ignoreSet.add(field);                }            }            //获取所有的成员变量            Field[] fields = clazz.getDeclaredFields();            //遍历这些成员遍历            for (Field field : fields) {                //判断,要跳过所有的静态成员变量                if (Modifier.isStatic(field.getModifiers())) {                    continue;//跳过                }                //获取成员变量的名称                String fieldName = field.getName();                //跳过需要忽略的成员变量---一会使用hashSet实现                if (ignoreSet.contains(fieldName)) {                    continue;                }                //设置我们可以访问私有成员变量                field.setAccessible(true);                //System.out.print("成员变量名:"+fieldName);                //获取到变量值                Object value = field.get(obj);                //System.out.println("变量值为:"+value);                //将成员变量名作为key,值作为value添加进map集合                map.put(fieldName, value);            }            //处理父类成员变量            clazz=clazz.getSuperclass();        }        return map;    }    public static void main(String[] args) throws IllegalAccessException {        Map<String, Object> stringObjectMap = new ObjectToMapConverter().toMap(new Student(16, "张三", 25));        System.out.println(stringObjectMap);    }}
 |