Wie Sie wissen, java.util.Objects
ist
Diese Klasse besteht aus statischen Dienstprogrammmethoden für die Bearbeitung von Objekten.
Eine dieser Methoden ist Objects.isNull()
.
Meines Wissens nach Objects.isNull()
würde dies die Möglichkeit beseitigen, dem Objekt versehentlich einen Nullwert zuzuweisen, indem der zweite weggelassen wird =
.
In der API-Anmerkung heißt es jedoch:
Diese Methode kann als Prädikatfilter verwendet werden (Objects :: isNull).
Gäbe es einen Grund / Umstand , für die ich verwenden soll object == null
über Objects.isNull()
in einer if - Anweisung ?
Sollte Objects.isNull()
sich ausschließlich auf Prädikate beschränken?
if(null == variable)
konsequent verwenden ...variable
ist einBoolean
.Antworten:
Wenn Sie sich den Quellcode der
IsNull
Methode ansehen ,/* Returns true if the provided reference is null otherwise returns false.*/ public static boolean isNull(Object obj) { return obj == null; }
Es ist das Gleiche. Es gibt keinen Unterschied. So können Sie es sicher verwenden.
quelle
== null
inif
, aber isNull ist großartig für Lambda-Ausdrücke.Objects.isNull
ist für die Verwendung innerhalb der Java 8-Lambda-Filterung vorgesehen.Es ist viel einfacher und klarer zu schreiben:
als zu schreiben:
.stream().filter(x -> x == null).
Innerhalb einer
if
Anweisung funktioniert jedoch beides. Die Verwendung von== null
ist wahrscheinlich einfacher zu lesen, aber am Ende wird es auf eine Stilpräferenz hinauslaufen.quelle
Schauen Sie sich die Quelle an:
public static boolean isNull(Object obj) { return obj == null; }
Um nach
null
Werten zu suchen, können Sie Folgendes verwenden:Objects.isNull(myObject)
null == myObject // avoids assigning by typo
myObject == null // risk of typo
Die Tatsache,
Objects.isNull
dass fürPredicate
s gedacht ist, hindert Sie nicht daran, es wie oben zu verwenden.quelle
=
anstelle von==
(würde nicht kompilieren, es sei denn, es ist ein nullbarerBoolean
Wrapper, yo fair sein)Boolean
Wrapper in Java beschränkt. Dies ist in der Tat ziemlich selten (und gibt Compiler-Warnungen aus, wenn eine Zuweisung annull
überprüft wird, als ob es eine Bedingung wäre), aber nicht unmöglich.Ja, ein Grund ist, den Code einfach zu halten. Innerhalb der if-Aussage
object == null
ist klar und bekannt. Es kann nicht zu Fehlverhalten führen, wenn beispielsweise ein Tippfehler vorliegt.Wenn ein
if (object = null) {}
mit weggelassen wird=
, wird es nicht kompiliert oder es wird eine Warnung im Falle einesBoolean
Objekts generiert ! Eigentlich gibt es keinen Grund zu verwenden ,Objects.isNull(object)
überobject == null
innerhalb if - Anweisung . Hier sind die beiden Varianten nebeneinander:if (object == null) { } if (Objects.isNull(object)) { }
Man könnte sagen, ja, es ist ausschließlich auf Prädikate beschränkt, obwohl es keine technische Hürde gibt, das
Objects.isNull()
überall zu nutzen .Aus dem
public static boolean isNull(Object obj)
Javadoc der Methode:Wenn Sie die Methode also nicht als Prädikat verwenden, verwenden Sie tatsächlich einen komplexeren und umständlicheren Ausdruck als den einfachen
object == null
.Hier ist ein Ausschnitt, um den Nutzen von zu vergleichen
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();
quelle
Semantisch gibt es keinen Unterschied, aber aus Gründen der Lesbarkeit bevorzuge ich Folgendes
whatever == null
:import static java.util.Objects.isNull; // Other stuff... if(isNull(whatever)) { }
quelle