java - 用于在两个 bean 中生成字段差异的通用算法?

标签 java algorithm diff javabeans

假设您有两个相同类型的 bean 实例,并且您希望显示两个实例之间更改内容的摘要 - 例如,您有一个代表应用程序中用户设置的 bean,并且您希望能够显示用户提交的新设置(实例 #1)中已更改的内容与已为用户存储的内容(实例 #2)的列表。

对于这样的任务,是否有一种常用的算法或设计模式,也许可以抽象出来并重新用于不同类型的 bean? (我很难为这类问题想出一个好名字来知道要用谷歌搜索什么)。我已经检查了 commons-beanutils,但没有发现任何问题。

最佳答案

如果你在谈论比较值,我会考虑使用反射并逐个字段地比较它们。

像这样:


    Field[] oldFields = oldInstance.class.getDeclaredFields();
    Field[] newFields = newInstance.class.getDeclaredFields();
    StringBuilder changes = new StringBuilder();

    Arrays.sort(oldFields);
    Arrays.sort(newFields);

    int i = 0;
    for(Field f : oldFields)
    {
       if(!f.equals(newFields[i]))
       {
          changes.append(f.getName()).append(" has changed.\n");
       }
       i++;
    }

此代码尚未经过测试。您可能需要获取字段中的值并比较它们,而不是仅仅将字段相互比较,但这在理论上应该可行。

关于java - 用于在两个 bean 中生成字段差异的通用算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/578209/

相关文章:

Java:当从 JMenuItem 多次调用方法时,JTextField 会创建无限循环

javascript - 双线性缩放算法奇怪的效果

python - python中的多级JSON差异

git - 如何在不关闭文件之间的编辑器的情况下解决与 "git mergetool"的多个冲突?

java - 存储过程使用 Sqlite : Android

java - Apache POI : separate logic for xls and xlsx?

java - 为什么 Null Pointer Exception 对象的 cause 字段为空?

algorithm - 计算地理 map 上点密度最高区域的高效算法

c++ - 使用 "find"访问 vector 中的值

java - 是否有比较/区分两个 Java 包的合适工具?