Есть ли библиотека служебных программ Java, аналогичная программному diff Unix, но для объектов? Я ищу что-то, что может сравнить два объекта одного типа и создать структуру данных, которая представляет различия между ними (и может рекурсивно сравнивать различия в переменных экземпляра). Я не ищет Java-реализацию текстового diff. Я также не ищет помощь в том, как использовать отражение для этого.
Приложение, которое я поддерживаю, имеет хрупкую реализацию этой функциональности, которая имела некоторые плохие варианты дизайна и которая должна быть переписана, но было бы еще лучше, если бы мы могли что-то использовать с полки.
Вот пример того, что я ищу:
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 наиболее естественно быть деревом, но я не собираюсь быть придирчивым, если код надежный.