質問

JDKには、2つのオブジェクトが等しいかどうかを比較し、NULLを考慮に入れるメソッドがありますか?このようなもの:

public static boolean equals(Object o1, Object o2)
{
    if (o1 == null)
    {
        return o2 == null; // Two nulls are considered equal
    }
    else if (o2 == null)
    {
        return false;
    }

    return o1.equals(o2);
}

このメソッドを既にどこかに存在している必要があると思うので、このメソッドを自分で記述するのはばかげているようです。

役に立ちましたか?

解決

Java 7.0は、新しい便利なクラスを追加しました: Objects

このためのメソッドがあります: Objects.equals(Object a、Object b)

他のヒント

Apache Commons Langには次のようなメソッドがあります: ObjectUtils.equals(object1、object2)。このようなメソッドのジェネリックは必要ありません。少なくとも一般的には、偽のコンパイルエラーが発生します。 Equalsは、オブジェクトのクラスをチェックしてfalseを返すことを非常によく知っている(またはすべきである-契約の一部である)ため、追加のタイプセーフティは必要ありません。

FWIW、これは私の実装でした:

private static boolean equals(Object a, Object b) {
    return a == b || (a != null && a.equals(b));
}

私のアプリケーションでは、aとbは常に同じ型であることを知っていますが、a.equals()が合理的に実装されていれば、たとえそうでなくてもうまく動作すると思います。

public static boolean equals(Object object1, Object object2) {
    if (object1 == null || object2 == null) {
        return object1 == object2;
    }
    return object1.equals(object2);
}

NullPointerExceptionsが心配な場合は、次のような同等性をテストするだけです:

if (obj1 != null && obj1.equals(obj2)) { ... }

equals()の一般的な規約は、null以外のオブジェクトがnull参照と等しくなることはなく、 equals()メソッドはfalseを返すことです。オブジェクトをnull参照と比較する場合(およびNPEをスローしない場合)。

私がニーズに出くわし、「これは非常に一般的なJavaである必要がある」と思うたびに見つからない場合は、ジャカルタコモンズプロジェクトをチェックします。それはほとんど常にそれを持っています。 commons-lang API(最も基本的な共通ユーティリティがある)をすばやく検索すると、必要なものを提供する equals() メソッド。

>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top