Differences between 2 objects with Java reflection : how?

For an audit log, i need to know the differences between 2 objects.

Those objets may contains others objets, list, set of objects and so the differences needed maybe recursive if desired.

Is there a api using reflection (or other) already for that ?

Thanks in advance.

Regards


It's a pretty daunting problem to try and solve generically. You might consider pairing a Visitor pattern, which allows you to add functionality to a graph of objects, with a Chain of Responsibility pattern, which allows you to break separate the responsibility for executing a task out into multiple objects and then dynamically route requests to the right handler.

If you did this, you would be able to generate simple, specific differentiation logic on a per-type basis without having a single, massive class that handles all of your differentiation tasks. It would also be easy to add handlers to the tree.

The best part is that you can still have a link in your Chain of Responsibility for "flat" objects (objects that are not collections and basically only have propeties), which is where reflection would help you the most anyway. If you "catch-all" case uses simple reflection-based comparison and your "special" cases handle things like lists, dictionaries, and sets, then you will have a flexible, maintainable, inexpensive solution.

For more info:

  • http://www.netobjectives.com/PatternRepository/index.php?title=TheChainOfResponsibilityPattern
  • http://www.netobjectives.com/PatternRepository/index.php?title=TheVisitorPattern

  • I have written a framework that does exactly what you were looking for. It generates a graph from any kind of object, no matter how deeply nested it is and allows you to traverse the changes with visitors. I have already done things like change logs generation, automatic merging and change visualization with it and so far it hasn't let me down.

    I guess I'm a few years too late to help in your specific case, but for the sake of completion, here's the link to the project: https://github.com/SQiShER/java-object-diff

    链接地址: http://www.djcxy.com/p/45306.html

    上一篇: 你被抓到了什么git陷阱?

    下一篇: 2个对象与Java反射之间的差异:如何?