Existe uma biblioteca de utilitários Java que é análoga ao programa diff do Unix, mas para objetos? Estou procurando por algo que pode comparar dois objetos do mesmo tipo e gerar uma estrutura de dados que representa as diferenças entre eles (e pode comparar recursivamente diferenças em variáveis de instância). Estou não à procura de uma implementação Java de um diff texto. Também não estou procurando ajuda sobre como usar a reflexão para fazer isso.
O aplicativo que estou mantendo tem uma implementação frágil dessa funcionalidade que teve algumas escolhas de design ruins e que precisa ser reescrita, mas seria ainda melhor se pudéssemos usar algo disponível.
Aqui está um exemplo do tipo de coisa que estou procurando:
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
Após a comparação, o utilitário me diria que "prop1" é diferente entre os dois objetos e "prop2" é o mesmo. Eu acho que é mais natural para DiffDataStructure ser uma árvore, mas não vou ser exigente se o código for confiável.