Ci sarebbe qualche ragione/circostanza per la quale dovrei usare oggetto == null sopra Objects.isNull() in una if?
Sì, uno dei motivi è mantenere il codice semplice. Entro se la dichiarazioneobject == null
è chiara e ben nota. Non può portare a comportamenti scorretti se, per esempio, c'è un errore di battitura.
La mia comprensione è che Objects.isNull() rimuoverà la possibilità di assegnare accidentalmente un valore nullo all'oggetto omettendo il secondo =.
Se c'è un if (object = null) {}
con omesso=
non si compila o si genererà avviso in caso di Boolean
oggetto! In realtà non vi è alcun motivo per utilizzare Objects.isNull(object)
su object == null
entro se la dichiarazione. Ecco lato due varianti all'altro:
if (object == null) {
}
if (Objects.isNull(object)) {
}
Qualora Objects.isNull() essere limitato esclusivamente predicati?
Si potrebbe dire di sì, si limita a predicati in esclusiva, anche se non v'è alcun ostacolo tecnico di utilizzare il Objects.isNull()
ovunque.
Dal javadoc il metodo del public static boolean isNull(Object obj)
:
metodo @apiNoteThis esiste per essere utilizzato come java.util.function.Predicate, filtro (Oggetti :: isNull)
Quindi, se si utilizza il metodo come non un predicato in realtà si sta utilizzando un'espressione più complessa e ingombrante rispetto al semplice object == null
.
Ecco un frammento per confrontare il beneficio di 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();
c'è anche Objects.requireNonNull (T obj); btw –
Se tutto ciò che ti preoccupa è l'assegnazione accidentale, puoi semplicemente usare 'if (null == variable)' coerentemente ... – Holger
@Holder, quale compito accidentale c'è da preoccuparsi? Questo è Java. Riceverai un errore di tipo. –