gpt4 book ai didi

java - 是否有可以 "diff"两个对象的 Java 库?

转载 作者:IT老高 更新时间:2023-10-28 11:53:57 24 4
gpt4 key购买 nike

是否有类似于 Unix 程序差异的 Java 实用程序库,但用于对象?我正在寻找可以比较相同类型的两个对象并生成表示它们之间差异的数据结构的东西(并且可以递归地比较实例变量中的差异)。我不是在寻找文本差异的 Java 实现。我也寻求有关如何使用反射来做到这一点的帮助。

我正在维护的应用程序对此功能的实现很脆弱,有一些糟糕的设计选择,需要重写,但如果我们可以使用现成的东西会更好。

这是我正在寻找的那种东西的一个例子:

SomeClass a = new SomeClass();
SomeClass b = new SomeClass();

a.setProp1("A");
a.setProp2("X");

b.setProp1("B");
b.setProp2("X");

DiffDataStructure diff = OffTheShelfUtility.diff(a, b); // magical recursive comparison happens here

比较后,实用程序会告诉我“prop1”在两个对象之间是不同的,而“prop2”是相同的。我认为 DiffDataStructure 是一棵树是最自然的,但如果代码可靠,我不会挑剔。

最佳答案

可能有点晚了,但我和你的情况一样,最终为你的用例创建了我自己的库。由于我被迫自己想出一个解决方案,我决定在 Github 上发布它,以减轻其他人的辛苦工作。你可以在这里找到它:https://github.com/SQiShER/java-object-diff

--- 编辑 ---

下面是一个基于 OPs 代码的小用法示例:

SomeClass a = new SomeClass();
SomeClass b = new SomeClass();

a.setProp1("A");
a.setProp2("X");

b.setProp1("B");
b.setProp2("X");

DiffNode diff = ObjectDifferBuilder.buildDefault().compare(a, b);

assert diff.hasChanges();
assert diff.childCount() == 1;
assert diff.getChild('prop1').getState() == DiffNode.State.CHANGED;

关于java - 是否有可以 "diff"两个对象的 Java 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8001400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com