栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

利用Java反射机制比较两个对象各属性是否一致,对不一致的进行处理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

利用Java反射机制比较两个对象各属性是否一致,对不一致的进行处理

这两天有个需求需要对两个对象的内容进行比较,不同的数据进行记录。思考再三,我觉得使用反射机制进行处理更加方便。
这里封装了两个方法。
1.一个是参考网上的信息,获取类中属性的值

 
public static Object getFieldValueByName(String fieldName, Object o) {
        try {
            String firstLetter = fieldName.substring(0, 1).toUpperCase();
            String getter = "get" + firstLetter + fieldName.substring(1);
            Method method = o.getClass().getMethod(getter, new Class[] {});
            Object value = method.invoke(o, new Object[] {});
            return value;
        } catch (Exception e) {
            log.error(e.getMessage(),e);
            return null;
        }
    }

2.另一个是对两个对象进行验证,并保存修改信息

    public static List CompareCzjl(Object old_entity, Object new_entity, User user) {
        //返回类
        Class new_czjl = new_entity.getClass();
        Class old_czjl = old_entity.getClass();
        //初始化list和操作记录对象
        List czjlList = new ArrayList<>();
        Czjl_entity czjl_entity= null;
        try {
            //获取所有私有属性
            Field[] new_field = new_czjl.getDeclaredFields();
            //遍历
            for (Field field : new_field) {
                //允许修改
                field.setAccessible(true);
                //获取旧对象的对应属性
                Field old_field = old_czjl.getDeclaredField(field.getName());
                old_field.setAccessible(true);
                //当新对象属性为private且新对象属性值不为空且旧对象属性不为空且两个对象属性值不相等时
                if (field.getModifiers() == 2 && field.get(new_entity) != null && old_field.get(old_entity) != null && !field.get(new_entity).toString().equals(old_field.get(old_entity).toString())) {
                    //对不一致的属性进行处理
                   
                    //新增操作记录
                    czjl_entity = new Czjl_entity ();
                    czjl_entity.setId(UUID.randomUUID());
                    //登录人信息
                    czjl_entity.setUserId(user.getId());
                    czjl_entity.setUsername(user.getXm());
                    //对象id
                    czjl_entity.setEntitiyId(getFieldValueByName("id",new_entity).toString());
                    //对象简称
                    czjl_entity.setEntitySimName(new_entity.getClass().getSimpleName());
                    //对象全称
                    czjl_entity.setEntityName(new_entity.getClass().getName());
                    //字段名
                    czjl_entity.setEntity(field.getName());
                    //属性值,原字段内容,现字段内容
                    czjl_entity.setOldTableContent(old_field.get(old_entity).toString());
                    czjl_entity.setNewTableContent(field.get(new_entity).toString());
                    //修改时间
                    czjl_entity.setEditTime(new Date());
                    czjlList.add(czjl_entity);
                }
            }
        } catch (Exception e) {
            log.error(e.getMessage(),e);
            return null;
        }
        return czjlList;

    }

这里用了Field类中的getModifiers方法,该方法会返回当前属性的修饰符int类型值。如private修饰符返回2,我这里做了限制,只对修饰符为private的属性进行操作。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/631148.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号