¿Existe una biblioteca de utilidades de Java que sea análoga al programa diff de Unix, pero para Objects? Estoy buscando algo que pueda comparar dos objetos del mismo tipo y generar una estructura de datos que represente las diferencias entre ellos (y pueda comparar de forma recursiva diferencias en variables de instancia). Estoy no en busca de una implementación en Java de un diff texto. También estoy no en busca de ayuda con la forma de utilizar la reflexión para hacer esto.
La aplicación que mantengo tiene una implementación frágil de esta funcionalidad que tenía algunas opciones de diseño deficientes y que necesita ser reescrita, pero sería aún mejor si pudiéramos usar algo disponible.
Aquí hay un ejemplo del tipo de cosas que estoy buscando:
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
Después de la comparación, la utilidad me diría que "prop1" es diferente entre los dos objetos y "prop2" es el mismo. Creo que es más natural que DiffDataStructure sea un árbol, pero no voy a ser exigente si el código es confiable.