是否有一个类似于 Unix 程序 diff 的 Java 实用程序库,但是针对对象?我正在寻找可以比较相同类型的两个对象并生成表示它们之间差异的数据结构(并且可以递归比较实例变量中的差异)的东西。我是not寻找文本差异的 Java 实现。我也是not寻求有关如何使用反射来执行此操作的帮助。
我正在维护的应用程序对此功能的实现很脆弱,有一些糟糕的设计选择,需要重写,但如果我们可以使用现成的东西,那就更好了。
这是我正在寻找的东西的一个例子:
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
--- Edit ---
下面是一个基于 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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)