是否有可以“区分”两个对象的 Java 库?

新手上路,请多包涵

是否有类似于 Unix 程序 diff 的 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 是一棵树是最自然的,但如果代码可靠,我不会挑剔。

原文由 Kaypro II 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 274
1 个回答

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

编辑---

这是一个基于 OP 代码的小用法示例:

 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;

原文由 SQiShER 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏