Java.util.Objet.isNull vs objet == null
Comme vous le savez, java.util.Les objets
un utilitaire de méthodes pour les opérations sur les objets
une de ces méthodes est celle des objets.isNull ().
Ma compréhension est que les Objets.isNull () supprimerait la possibilité d'attribuer accidentellement une valeur nulle à l'objet en omettant la seconde =.
Toutefois, l'API Note membres:
cette méthode existe pour être utilisé comme prédicat, filtre (:: isNull)
y aurait-il une raison/circonstance pour laquelle je devrais utiliser object == null sur les objets.isNull() dans un si la déclaration<!--12?
Devrait Objecter.isNull() se limite à des Prédicats exclusivement?
Merci à l'avance, Lucas
4 réponses
devrait utiliser object = = null Sur Objects.isNull() dans une instruction if?
Si vous regardez l' code sourceIsNull
méthode
/* Returns true if the provided reference is null otherwise returns false.*/
public static boolean isNull(Object obj) {
return obj == null;
}
C'est la même chose. Il n'y a pas de différence. Pour que vous puissiez l'utiliser en toute sécurité.
Objets.isNull est destiné à être utilisé dans le cadre de Java 8 lambda filtering.
C'est beaucoup plus facile et plus clair d'écrire
.stream().filter(Objects::isNull)
que d'écrire
.stream().filter(x -> x == null).
dans un si cependant l'un ou l'autre fonctionnera, l'utilisation de == null est probablement plus facile à lire mais à la fin il se limitera à une préférence de style.
Regardez le code source:
public static boolean isNull(Object obj) {
return obj == null;
}
À vérifier null
valeurs, vous pouvez utiliser:
Objects.isNull(myObject)
null == myObject // avoids assigning by typo
myObject == null // risk of typo
Le fait que Objects.isNull
signifie Predicate
s ne vous empêche pas de l'utiliser comme ci-dessus.
y aurait-il une raison/circonstance pour laquelle je devrais utiliser object == null sur les objets.isNull() dans un si la déclaration?
Oui, une des raisons est pour simplifier le code. Dans si la déclarationobject == null
est claire et bien connue. Il ne peut y avoir de mauvaise conduite si, par exemple, il y a une faute de frappe.
Ma compréhension est que les Objets.isNull () supprimerait le risque d'attribuer accidentellement un null la valeur de l'objet, par l'omission de la deuxième =.
S'il y a un if (object = null) {}
omis=
il ne compilera pas ou générera un avertissement en cas de Boolean
objet! En fait il n'y a pas de raison d'utiliser Objects.isNull(object)
object == null
à l'intérieur de si la déclaration. Voici les deux versions côte à côte:
if (object == null) {
}
if (Objects.isNull(object)) {
}
Devrait Objecter.isNull() se limite à des Prédicats exclusivement?
cela pourrait être si oui, il est limité aux prédicats exclusivement, bien qu'il n'y ait pas d'obstacle technique à l'utilisation du Objects.isNull()
partout.
public static boolean isNull(Object obj)
javadoc de method:
@apinoteth cette méthode existe pour être utilisée comme java.util.fonction.Prédicat de filtre (:: isNull)
Donc, si vous utilisez la méthode un prédicat vous utilisez en fait une expression plus complexe et encombrante par rapport à la simple object == null
.
voici un extrait pour comparer les avantages de 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();