一尘不染

在两个bean中生成字段差异的常用算法?

algorithm

假设您有两个具有相同bean类型的实例,并且想要显示两个实例之间发生了什么变化的摘要-
例如,您有一个Bean代表您的应用程序中的用户设置,并且您想要以便能够显示用户正在提交的新设置(实例1​​)与已为用户存储的内容(实例2)的更改列表。

是否有用于此类任务的常用算法或设计模式,也许可以将其抽象并重新用于不同类型的bean?(我很难想出这类问题的好名字,以知道该如何处理Google)。我检查了commons-
beanutils,但没有发现任何异常。


阅读 196

收藏
2020-07-28

共1个答案

一尘不染

如果您正在谈论比较值,我会考虑使用反射,然后逐场比较它们。

像这样:

    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++;
    }

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

2020-07-28