是否存在类似于Unix程序diff的Java实用程序库,但对于Objects?我正在寻找可以比较两个相同类型的对象并生成表示它们之间差异的数据结构的东西(并且可以递归地比较实例变量中的差异).我不是在寻找文本差异的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
Run Code Online (Sandbox Code Playgroud)
比较之后,实用程序会告诉我"prop1"在两个对象之间是不同的,"prop2"是相同的.我认为DiffDataStructure最自然的是树,但如果代码可靠,我不会挑剔.
我需要在Java字符串之间执行Diffs.我希望能够使用原始字符串和diff版本重建字符串.有没有人用Java做过这个?你用什么图书馆?
String a1; // This can be a long text
String a2; // ej. above text with spelling corrections
String a3; // ej. above text with spelling corrections and an additional sentence
Diff diff = new Diff();
String differences_a1_a2 = Diff.getDifferences(a,changed_a);
String differences_a2_a3 = Diff.getDifferences(a,changed_a);
String[] diffs = new String[]{a,differences_a1_a2,differences_a2_a3};
String new_a3 = Diff.build(diffs);
a3.equals(new_a3); // this is true
Run Code Online (Sandbox Code Playgroud)