Nullを考慮して、2つのオブジェクトが等しいかどうかを比較するJDKのメソッドはありますか?このようなもの:
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参照と等しくなることはなく、オブジェクトをnullと比較している場合はequals()
メソッドがfalseを返すことです。参照(NPEをスローしない)。
私は必要に遭遇し、「これは非常に一般的であるJavaがなければならない」と思ったが、そうでないとわかったときはいつでも、Jakarta Commonsプロジェクトをチェックします。ほとんど常にそれを持っています。クイック検索commons-lang API(一般的なユーティリティの最も基本的なもの)の equals()
メソッドは、必要なものを提供します。
Jakarta Commons Lang APIはあなたが探しているものを持っています ObjectUtils.equals(Object、Object)