Usa Objects.requireNonNull(Object)
per quello.
Verifica che il riferimento all'oggetto specificato non sia nullo. Questo metodo è progettato principalmente per eseguire la convalida dei parametri in metodi e costruttori, [...]
Nel tuo caso questo sarebbe:
public void useObject(CustomObject customObject) {
object = customObject.getObject();
Objects.requireNonNull(object);
// Do stuff using object, which would throw a NPE if object is null.
}
Questa funzione è realizzata per gli scopi che hai citato, ovvero contrassegnare esplicitamente ciò che non deve essere nullo; anche in produzione. Il grande vantaggio è che ti assicuri di trovare valori nulli proprio dove non dovrebbero verificarsi in primo luogo. Avrai meno problemi di debug causati da valori null che sono stati passati da qualche parte dove non dovrebbero essere.
Un altro vantaggio è la flessibilità aggiuntiva rispetto ai controlli null rispetto a assert
. Mentre assert
è una parola chiave per controllare un valore booleano, Objects.requireNonNull(Object)
è una funzione e quindi può essere incorporata nel codice molto più flessibile e leggibile. Per esempio:
Foo foo = Objects.requireNonNull(service.fetchFoo());
// You cannot write it in on line.
Bar bar = service.fetchBar();
assert bar != null;
service.foo(Objects.requireNonNull(service.getBar()));
// You cannot write it in on line.
Bar bar = service.getBar();
assert bar != null;
service.foo(bar);
Tieni presente che Objects.requireNonNull(Object)
è esclusivamente per il controllo null doveassert
è generalizzato.assert
ha scopi leggermente diversi al riguardo, vale a dire principalmente i test. Deve essere abilitato, quindi è possibile abilitarlo per i test e disabilitarlo per la produzione. Comunque, non usarlo per il codice di produzione. Potrebbe rallentare l'applicazione con convalide inutili e complicate destinate al test. Usalo per separare i controlli di solo test dai controlli che sono destinati anche alla produzione.
Controlla la documentazione ufficiale per i dettagli assert
.
-ea
o equivalente.