Użyj Objects.requireNonNull(Object)
do tego.
Sprawdza, czy określone odwołanie do obiektu nie ma wartości NULL. Ta metoda jest przeznaczona przede wszystkim do sprawdzania poprawności parametrów w metodach i konstruktorach, [...]
W twoim przypadku byłoby to:
public void useObject(CustomObject customObject) {
object = customObject.getObject();
Objects.requireNonNull(object);
// Do stuff using object, which would throw a NPE if object is null.
}
Ta funkcja została stworzona do celów, o których wspomniałeś, tj. Wyraźnie zaznacz, co nie ma wartości zerowej; także w produkcji. Ogromną zaletą jest to, że upewniasz się, że znajdziesz wartości zerowe dokładnie tam, gdzie nie powinny występować. Będziesz miał mniej problemów z debugowaniem problemów spowodowanych zerowymi wartościami, które zostały przekazane gdzieś, gdzie nie powinny być.
Kolejną korzyścią jest dodatkowa elastyczność w zakresie kontroli zerowej w przeciwieństwie do assert
. Chociaż assert
jest słowem kluczowym do sprawdzania wartości logicznej, Objects.requireNonNull(Object)
jest funkcją i dlatego może być osadzony w kodzie o wiele bardziej elastyczny i czytelny. Na przykład:
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);
Należy pamiętać, że Objects.requireNonNull(Object)
służy wyłącznie do sprawdzania wartości zerowej w przypadku assert
uogólnienia. assert
ma nieco inne cele w tym względzie, tj. przede wszystkim testowanie. Musi być włączony, aby można go było włączyć do testowania i wyłączyć do produkcji. W każdym razie nie używaj go do kodu produkcyjnego. Może to spowolnić działanie aplikacji dzięki niepotrzebnym i skomplikowanym sprawdzeniom poprawności przeznaczonym do testowania. Użyj go, aby oddzielić kontrole tylko testowe od kontroli przeznaczonych również do produkcji.
Sprawdź oficjalną dokumentację, aby uzyskać szczegółowe informacje na temat assert
.
-ea
lub równoważnego.