zoukankan      html  css  js  c++  java
  • Java 反射实现实体转Map时,父类元素丢失

    public class BeanToMap {
        public static Map<String, Object> ConvertObjToMap(Object obj) {
            Map<String, Object> reMap = new HashMap<>();
            if (obj == null)
                return null;
            List<Field> fields = new ArrayList<>();
            List<Field> childFields;
            List<String> fieldsName = new ArrayList<>();
            Class tempClass = obj.getClass();
            while (tempClass != null) {//当父类为null的时候说明到达了最上层的父类(Object类).
                fields.addAll(Arrays.asList(tempClass.getDeclaredFields()));
                tempClass = tempClass.getSuperclass(); //得到父类,然后赋给自己
            }
            childFields = Arrays.asList(obj.getClass().getDeclaredFields());
            for (Field field : childFields) {
                fieldsName.add(field.getName());
            }
            try {
                for (Field field : fields) {
                    try {
                        if (fieldsName.contains(field.getName())) {
                            Field f = obj.getClass().getDeclaredField(
                                    field.getName());
                            f.setAccessible(true);
                            Object o = f.get(obj);
                            reMap.put(field.getName(), o);
                        } else {
                            Field f = obj.getClass().getSuperclass().getDeclaredField(
                                    field.getName());
                            f.setAccessible(true);
                            Object o = f.get(obj);
                            reMap.put(field.getName(), o);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            } catch (SecurityException e) {
                e.printStackTrace();
            }
            return reMap;
        }
    }

    上述代码实现了实体转map,不过当实体是子类的时候,会出现异常,需要考虑到的问题是父类。

    通过这种方式保证获取到父类的信息

    obj.getClass().getSuperclass()
  • 相关阅读:
    RegularExpression 2
    Python __str__() and __repr()__
    RegularExpression 1
    python new kill callback
    Generic Programming v1
    spring的@Transactional注解详细用法
    cmd批量打开网页和关闭网页的批处理代码
    windows批处理中实现延时的办法
    单元测试
    Protocol (网络数据交换规则)
  • 原文地址:https://www.cnblogs.com/zacky31/p/8611359.html
Copyright © 2011-2022 走看看