Widziałem jakąś metodę w Javie zadeklarowaną jako:
void foo(@Nullable Object obj)
{ ... }
Jakie jest znaczenie tego @Nullable
tutaj? Czy to oznacza, że wkład może być null
?
Bez adnotacji dane wejściowe nadal mogą być zerowe, więc myślę, że to nie tylko to?
java
annotations
użytkownik1508893
źródło
źródło
@Nullable
w kontekście twojego pytania? Czy to Checker?Odpowiedzi:
Wyjaśnia, że metoda akceptuje wartości zerowe i że jeśli przesłonisz metodę, powinieneś również zaakceptować wartości zerowe.
Służy również jako wskazówka dla analizatorów kodu, takich jak FindBugs . Na przykład, jeśli taka metoda odrzuci swój argument, nie sprawdzając najpierw wartości null, FindBugs wyświetli ostrzeżenie.
źródło
Ta adnotacja jest powszechnie stosowana w celu wyeliminowania
NullPointerExceptions
.@Nullable
mówi, że ten parametr może byćnull
. Dobry przykład takiego zachowania można znaleźć w Google Guice . W tej lekkiej strukturze wstrzykiwania zależności można stwierdzić, że ta zależność może byćnull
. Jeśli spróbujesz przejśćnull
bez adnotacji, framework odmówi wykonania swojej pracy.Co więcej,
@Nullable
można użyć z@NotNull
adnotacjami. Tutaj znajdziesz kilka wskazówek, jak prawidłowo z nich korzystać. Kontrola kodu w IntelliJ sprawdza adnotacje i pomaga debugować kod.źródło
Różne narzędzia mogą
@Nullable
różnie interpretować znaczenie . Na przykład, ramowa Checker i FindBugs poradzić@Nullable
inaczej .źródło
To prawda, że w moim świecie są zdecydowanie inne sposoby myślenia, nie mogę egzekwować „Nigdy nie zerwać wartości zerowej”, ponieważ mam do czynienia z niekontrolowanymi stronami trzecimi, takimi jak wywołujące API, rekordy baz danych, byli programiści itp., Więc jestem paranoiczny i defensywny w podejściach. . Ponieważ korzystasz z Java8 lub nowszej wersji, jest nieco czystsze podejście niż
if
blok.Możesz także zgłosić wyjątek, zamieniając
.orElse
naorElseThrow(() -> new Exception("Dont' send a null"))
.Jeśli nie chcesz używać @Nullable, który nie dodaje nic funkcjonalnie, dlaczego nie nazwać parametru
mayBe...
tak, aby Twoja intencja była jasna.źródło