Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Diff between two instances of same class [duplicate]

Tags:

java

javabeans

I have two instances of the same class. I need to find property(s) which are different amongst them (basically value of the property, say firstName might be different in both). The fields are primitive, complex as well as collections.

Basically, I need to find differences between two instances and if the fields are different in both the instances, I will copy value of the field from first instance to a third instance (diff object).

I think I can use reflection, but the classes are very complex and it might become error prone.

like image 784
user416771 Avatar asked Aug 11 '10 01:08

user416771


1 Answers

Your question is a bit unclear. First you said "two instances of the same class", then you said "the classes are very complex". Is this a generic solution to find differences between instances for any class, or is it just a specific case? The other ambiguity is what you mean by "copy the differences". For example, if its a String, then what is the difference between the two strings that would get copied into the new instance? If its a collection, what is the difference between the collections? What if you have two ArrayLists that have the same things in different orders.

If its a specific case, then you can just create a method on the class where you pass in an instance of the same class. Then you can iterate over each field and compare the differences.

public TheClass difference(TheClass that) {
  TheClass newClass = new TheClas()
  if (this.getName().equals(that.getName()) == false ) {
    newClass.setName(that.getName());
  }
  ...
}

But this can get out of hand depending on how deep your object graph is.

Perhaps the builder pattern might come in handy here if you're trying to build a generic/reusable solution. You might look at the Apache Commons code base and see how they implement HashCodeBuilder and ToStringBuilder. They even have a reflection version of the utilities. See how they handle deep and shallow equals.

like image 174
Javid Jamae Avatar answered Nov 08 '22 03:11

Javid Jamae