美文网首页
对象内容对比

对象内容对比

作者: javacoo | 来源:发表于2020-12-24 17:27 被阅读0次

对象内容对比

日常开发中,经常涉及到操作日志的记录,将操作前后数据变化一一记录下来,这就涉及到2个新旧数据对象的对比。

设计思路

自定义注解,然后利用反射机制,找到对象中包含自定义注解的字段,获取其值,进行对比。

实现代码 v1.0(简单实现版)

1:自定义注解类,BeanDoc

/**
 * 注释
 * <li>用于字段</li>
 * @author duanyong@jccfc.com
 * @date 2020/11/9 20:11
 */
@Inherited
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface BeanDoc {
    String value() default "";
}

2:定义工具类,添加compareObject方法

/**
 * 对象比较
 * <li></li>
 * @author duanyong@jccfc.com
 * @date 2020/11/10 9:07
 * @version 1.0
 * @param oldBean:原始对象
 * @param newBean:新对象
 * @return: java.util.List<java.lang.String[]>[字段,字段描述,旧值,新值]
 */
public static List<String[]> compareObject(Object oldBean, Object newBean) {
    List<String[]> results = new ArrayList<>(15);
    try {
        Class clazz = oldBean.getClass();
        Field[] fields = oldBean.getClass().getDeclaredFields();
        for (Field field : fields) {
            if ("serialVersionUID".equals(field.getName())) {
                continue;
            }
            BeanDoc beanDoc = field.getAnnotation(BeanDoc.class);
            if(beanDoc == null){
                continue;
            }
            PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz);
            Method getMethod = pd.getReadMethod();
            Object v1 = getMethod.invoke(oldBean);
            Object v2 = getMethod.invoke(newBean);
            if (v1 == null && v2 == null) {
                continue;
            }
            v1 = v1 == null ? new String() : v1;
            v2 = v2 == null ? new String() : v2;
            if (!v1.toString().equals(v2.toString())) {
                String[] strArray = new String[4];
                strArray[0] = field.getName();
                strArray[1] = StringUtils.isBlank(beanDoc.value()) ? "" : beanDoc.value();
                strArray[2] = v1.toString();
                strArray[3] = v2.toString();
                results.add(strArray);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
        logger.error("对象比较失败:",e);
    }
    return results;
}
一些信息
路漫漫其修远兮,吾将上下而求索
码云:https://gitee.com/javacoo
QQ群:164863067
作者/微信:javacoo
邮箱:xihuady@126.com

相关文章

  • 对象内容对比

    对象内容对比 日常开发中,经常涉及到操作日志的记录,将操作前后数据变化一一记录下来,这就涉及到2个新旧数据对象的对...

  • 1.27雅思全程班写作

    一、quiz 二、静态图 第一类 ---多个对象对比多个内容 第二类---两个对象对比多个内容 summary位置...

  • Web开发中常见的坑

    2017-03-28基本都是Effective Java上的内容 1、对象方法 equals 用“值”对比对象,要...

  • 新浪微博、微信朋友圈、QQ动态移动端内容发布功能对比分析

    新浪微博、微信朋友圈、QQ动态移动端内容发布功能对比分析 1、目标:移动端内容发布功能对比分析 2、研究对象:新浪...

  • 寻找内心之相

    大概知道一张好照片的定义。考察内容不外乎包含构图、线条、色块、机理、光影、明暗、对比、对象等。概括说就是内容与形式...

  • 功能对比分析—“新浪微博、微信朋友圈、QQ动态【发布内容】功能”

    ​​​​​​一、三个产品「发布内容」功能对比 (一)界面对比 (二)【发布内容】功能对比 从“发布路径”和"内容设...

  • 反射相关

    1、对比两个对象是否同一类型,用字节码对比:获取对象字节码用getClass方法,对比时用双等号,因为在环境中,同...

  • svn 对比文件内容

    svn提交的时候,如何对比本地文件和svn上的文件有哪些改动?一般情况下,直接右键 --> SVN commit ...

  • svn 对比文件内容

    svn提交的时候,如何对比本地文件和svn上的文件有哪些改动?一般情况下,直接右键 --> SVN commit ...

  • 几个内容平台对比

    写博客也有一年多了,一般会在几个平台同时发布写好的内容,今天就来把几个内容平台做个对比。 这次准备倒序写,最差的在...

网友评论

      本文标题:对象内容对比

      本文链接:https://www.haomeiwen.com/subject/iynmnktx.html