Java是否提供了一个带有两个参数的equals方法

时间:2014-09-03 09:33:01

标签: java equals

在每个equals方法中,我需要为每个(相关)属性编写一个这样的块:

@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;
}

这是每次都没有任何好处,只是为了避免NullPointerExceptions。

打电话

会不会好得多
boolean doesIt = SomeClass.equals( member1, other.member1);

此方法将检查两者是否为空,如果不是,则在member1上调用默认值等于。

这意味着我的equals方法最终可能会像这样

@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);
}

我的眼睛更清晰,更不易出错。

当然,我自己编写这个类/方法绝对没有问题,但我想知道是否有一个提供equals(Object,Object)的类。

1 个答案:

答案 0 :(得分:11)

看看Objects.equals(Object a, Object b)

看起来正是您想要的,它还处理null值。在Java 7.0中引入。