Есть ли библиотека Java, которая может «различать» два объекта?

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

После сравнения утилита сообщила бы мне, что «prop1» различается между двумя объектами, а «prop2» - то же самое. Я думаю, что для DiffDataStructure наиболее естественно быть деревом, но я не буду привередничать, если код надежен.

76
задан Kaypro II 3 November 2011 в 22:45
поделиться