2

In each equals method I need to write a block like this for every (relevant) attribute:

@Override
public boolean equals(Object obj) {
  ...
  if (member1 == null) {
    if (other.member1 != null) {
      return false;
    }
  } else if (!member1.equals(other.member1)) {
    return false;
  }
  ...
  return true;
}

This is every time the same without any benefit just to avoid NullPointerExceptions.

Wouldn't it be much nicer just to call

boolean doesIt = SomeClass.equals( member1, other.member1);

This method would check if both are null and if not it calls the default equals on member1.

That would mean my equals method could at the end look like this

@Override
public boolean equals(Object obj) {
  return obj != null
         && getClass() == obj.getClass()
         && SomeClass.equals(member1, (((XX) other).member1)
         && SomeClass.equals(member2, (((XX) other).member2)
         && SomeClass.equals(member3, (((XX) other).member3)
         && SomeClass.equals(member4, (((XX) other).member4);
}

Much clearer and less error prone in my eyes.

Of course there is absolutely no problem writing this class/method on my own but I would like to know if there is possibly already a class which provides equals(Object, Object).

Marcel
  • 4,054
  • 5
  • 36
  • 50

1 Answers1

11

Take a look at Objects.equals(Object a, Object b).

Looks like exactly what you want, and it also handles null values. Was introduced in Java 7.0.

icza
  • 389,944
  • 63
  • 907
  • 827