Чи існує бібліотека утиліт Java, яка є аналогом програми Unix diff, але для об’єктів? Я шукаю щось, що може порівнювати два об'єкти одного типу та генерувати структуру даних, яка представляє відмінності між ними (і може рекурсивно порівнювати відмінності у змінних екземпляра). Я не шукаю реалізацію 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 найбільш природно бути деревом, але я не буду вимогливим, якщо код надійний.