Java標準の「両方がnullまたは等しい」静的メソッドはありますか?


101

入力の手間を省き、コードを明確にするために、次のメソッドの標準バージョンはありますか?

public static boolean bothNullOrEqual(Object x, Object y) {
  return ( x == null ? y == null : x.equals(y) );
}

誰かがそのようなものが便利なところを言うことができますか?
anjanb 2008年

2
equals()メソッドでnullチェックをスキップできるようにするだけです。
マイケルマイヤーズ

1
コレクションを実装する場合、.contains()メソッドは、「o」が指定されたときに、「このコレクションに(o == null?e == null:o.equals(e ))」同様に、.remove()メソッドはそのような要素を削除する必要があります。
newacct 2009

6
ちょうど私の2セント。私は使用します:public static boolean bothNullOrEqual(Object x、Object y){return(x == y ||(x!= null && x.equals(y))); 私見、初心者プログラマにとってはより読みやすいです。
m_vitaly

1
別の使用例:ダーティチェック中に値を比較して、前の値から変更されたかどうかを確認します。
Neromancer 2013年

回答:


193

Java 7を使用すると、nullセーフイコールを直接実行できます。

Objects.equals(x、y)

(Jakarta CommonsライブラリObjectUtils.equals()はJava 7で廃止されました)


このメソッドは、GoogleのDependencyインジェクションライブラリのGuiceにも実装されています。
Niels

1
Springも同様のメソッドを実装しています:ObjectUtilsクラスの
nullSafeEquals

2
Google GuavaにはObjects.equals()もあります。
Spina 2013

これは、nullsafe concering xのみです。yの場合、指定されたオブジェクトのequalsの実装に依存します。(実装はreturn (x == y) || (x != null && x.equals(y));
emi-le

23

万が一Jakarta Commonsライブラリにアクセスできる場合は、ObjectUtils.equals()やその他の便利な関数がたくさんあります。

編集:最初に質問を誤解する


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.