ご存知のように、 Java.util.Objects
は
このクラスは、オブジェクトを操作するための静的ユーティリティメソッドで構成されます。
そのようなメソッドの1つはObjects.isNull()
です。
私の理解では、Objects.isNull()
は2番目の=
を省略することで、誤ってnull値をオブジェクトに割り当てる可能性を排除します。
ただし、APIノートには次のように記載されています。
このメソッドは、Predicate、filter(Objects :: isNull)として使用するために存在します
ifステートメントでObjects.isNull()
よりもobject == null
を使用する必要がある理由/状況はありますか?
Objects.isNull()
は、述部のみに限定する必要がありますか?
ifステートメントでObjects.isNull()ではなくobject == nullを使用する必要がありますか?
ソースコード of IsNull
メソッドを見ると、
/* Returns true if the provided reference is null otherwise returns false.*/
public static boolean isNull(Object obj) {
return obj == null;
}
同じです。違いはありません。したがって、安全に使用できます。
Objects.isNullは、Java 8ラムダフィルタリング内での使用を目的としています。
書くのがずっと簡単で明確です
.stream().filter(Objects::isNull)
書くより
.stream().filter(x -> x == null).
If ifのどちらでも機能しますが、== nullを使用するとおそらく読みやすくなりますが、最終的にはスタイル設定になります。
ソースを見てください:
public static boolean isNull(Object obj) {
return obj == null;
}
null
値を確認するには、次を使用できます。
Objects.isNull(myObject)
null == myObject // avoids assigning by typo
myObject == null // risk of typo
Objects.isNull
がPredicate
sを対象としているという事実は、上記のように使用することを妨げません。
ifステートメントでObjects.isNull()に対してobject == nullを使用する必要がある理由/状況はありますか?
はい、1つの理由はコードをシンプルに保つことです。 ifステートメント内object == null
は明確で、よく知られています。たとえば誤植がある場合、不正行為を引き起こすことはできません。
私の理解では、Objects.isNull()は、2番目の=を省略することで、誤ってnull値をオブジェクトに割り当てる可能性を排除します。
omittedif (object = null) {}
が存在する場合、=
はコンパイルされないか、Boolean
オブジェクトの場合に警告を生成します!実際、ifステートメント内でobject == null
でObjects.isNull(object)
を使用する理由はありません。次に、2つのバリアントを並べて示します。
if (object == null) {
}
if (Objects.isNull(object)) {
}
Objects.isNull()はPredicatesのみに限定すべきですか?
はい、それは述語だけに限定されていますが、どこでもObjects.isNull()
を使用する技術的な障害はありません。
public static boolean isNull(Object obj)
メソッドのjavadocから:
@apiNoteこのメソッドは、Java.util.function.Predicate、filter(Objects :: isNull)として使用するために存在します
したがって、メソッドをnot述語として使用する場合、単純なobject == null
と比較して、より複雑で扱いにくい式を実際に使用しています。
Objects.isNull(object)
の利点を比較するスニペットを次に示します
List<String> list = Arrays.asList("a", "b", null, "c", null);
// As ready-made predicate
long countNullsWithPredicate = list.stream().filter(Objects::isNull).count();
// Lambda
long countNullsWithLambda = list.stream().filter(object -> object == null).count();
// Reimplement the Objects::isNull predicate
long countNullsWithAnonymous = list.stream().filter(new Predicate<Object>() {
@Override
public boolean test(Object obj) {
return obj == null;
}
}).count();