如何防止等于之前的空检查

Svi*_*ish 18 java equals code-cleanup

我觉得这样的东西在equals方法上很烦人和丑陋:

if (field == null)
{
    if (other.field != null)
        return false;
}
else if ( ! field.equals(other.field))
    return false;
Run Code Online (Sandbox Code Playgroud)

在C#中,我可以做到这一点:

if( ! Object.Equals(field, other.field))
    return false;
Run Code Online (Sandbox Code Playgroud)

在Java中是否有类似的东西,或者如果是这样的话,首选的方法是什么?

pho*_*ser 42

Java 7提供了java.util.Objects.equals.

  • 这是"新"推荐的方法.@Svish,如果你能为未来的观众改变接受的答案...... :) (4认同)
  • 注意:对于Android,此方法需要"最小API"> = 19. (3认同)

Luk*_*der 24

使用commons-lang:

org.apache.commons.lang.ObjectUtils.equals(Object object1, Object object2)
Run Code Online (Sandbox Code Playgroud)

源代码:

public static boolean equals(Object object1, Object object2) {
    if (object1 == object2) {
        return true;
    }
    if ((object1 == null) || (object2 == null)) {
        return false;
    }
    return object1.equals(object2);
}
Run Code Online (Sandbox Code Playgroud)

来自Apache

http://commons.apache.org/lang/

那与你在C#中所做的相同

  • @ÓscarLópez:你做不到.编译器不喜欢它(因为与`Object.equals(Object)`的冲突).这就是Guava的`equal()`方法更适合的地方 (2认同)

Nim*_*sky 6

番石榴等于这样做:

public static boolean equal(@Nullable Object a, @Nullable Object b) {
    return a == b || (a != null && a.equals(b));
  }
Run Code Online (Sandbox Code Playgroud)

null对象模式

番石榴还有一些相关的比较链和其他好东西.

  • 他们称方法“等于”而不是“等于”(例如commons-lang)的好处是它可以用于静态导入中。 (2认同)