Есть ли служебная библиотека 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 наиболее естественно быть деревом, но я не буду привередничать, если код надежен.