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

Mar*_*cel 2 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;
}
Run Code Online (Sandbox Code Playgroud)

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

打电话不是更好

boolean doesIt = SomeClass.equals( member1, other.member1);
Run Code Online (Sandbox Code Playgroud)

此方法将检查两者是否为null,如果不是,则在member1上调用默认值为equals.

这意味着我的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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

icz*_*cza 11

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

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