Gibt es eine Java-Dienstprogrammbibliothek, die dem Unix-Programm diff entspricht, jedoch für Objekte? Ich suche nach etwas, das zwei Objekte desselben Typs vergleichen und eine Datenstruktur generieren kann, die die Unterschiede zwischen ihnen darstellt (und Unterschiede in Instanzvariablen rekursiv vergleichen kann). Ich suche keine Java-Implementierung eines Textdiff. Ich suche auch keine Hilfe bei der Verwendung von Reflexion, um dies zu tun.
Die Anwendung, die ich pflege, hat eine fragile Implementierung dieser Funktionalität, die einige schlechte Designentscheidungen hatte und die neu geschrieben werden muss, aber es wäre noch besser, wenn wir etwas von der Stange verwenden könnten.
Hier ist ein Beispiel für die Art von Dingen, nach denen ich suche:
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
Nach dem Vergleich würde mir das Dienstprogramm sagen, dass "prop1" zwischen den beiden Objekten unterschiedlich ist und "prop2" gleich ist. Ich denke, es ist für DiffDataStructure am natürlichsten, ein Baum zu sein, aber ich werde nicht wählerisch sein, wenn der Code zuverlässig ist.