Sama Java nie jest z tymi adnotacjami.
Zamiast tego istnieje około 10 wzajemnie wykluczających się podejść do tego pomysłu, z których większość pracuje zupełnie inaczej i stosuje różne znaczenia do tego, co NonNull
znaczy, gdzie można go umieścić i jak to działa.
Bogactwo. To bardzo smutne, ponieważ główną ideą korzystania z adnotacji na dodanie tej informacji znacznie przewyższa niepotrzebną i tym podobne, biorąc pod uwagę, że będzie ona w pełni kompatybilny i nie doprowadzi istniejący kod do depresji wieku, w przeciwieństwie do Optional
.
Tak więc, znajdź ten, który ci się podoba, włącz je w swój projekt tak samo, jak włączeniu jakiejkolwiek zewnętrznej zależność - zazwyczaj poprzez włączenie go w swój Maven/Gradle/Ant+ivy/etc (lista zależności twój plik kompilacji).
U Intellij ma swój własny pogląd na zera i обнуляемое. To chyba najbardziej wygodna. Jego wyobrażenia o tym, co oznaczają te adnotacje, poniżej 1. Ramy Checker jest najlepszy, eclipse zajmuje drugie miejsce, a cała reszta (w tym intellij) zajmuje trzecie miejsce. najlepsze rozwiązanie można znaleźć w ramach kontroli, lub prawie tak samo dobrze, w eclipse, w tych komentarzach. Wątpię jednak, że systemy kontroli zer intellij są w stanie w pełni go zrozumieć bardziej zaawansowane dodatki, takie jak @PolyNull
więc ta informacja wyraziste moc będzie głównie przeznaczona zmarnowane. Jako bonus intellij usług mnóstwo danych o tym, jakie powinny być odpowiednie adnotacje o nieważności w głównych bibliotekach.
Ostatnia ważne: najczęściej używane biblioteki java, w tym java.*
sam w sobie, nie ma tych komentarzy, i praca z kodem z pół zerowym adnotacjami, na pewno jest bardzo nieprzyjemnym zajęciem; koszty znacznie przewyższają korzyści. Jedyne realne rozwiązanie - "naprawić" biblioteki, które używasz, z prawidłowej informacji o nieważności, ale to jest ogromna praca. Na szczęście, intellij wiele zrobił dla ciebie.
Spodziewałem się (eclipse to robi), że szybkie poprawka (CMD+1 na komputerach mac, CTRL+1 na komputerach, które nie są komputerami Mac, przynajmniej z pudełka, jeśli mi pomaga pamięć o skrótach klawiaturowych domyślnie) obejmuje "automatyczne dodawanie adnotacji o nieważności eclipse w drogę do klasy" (lub, w danym przypadku, intellij, oczywiście). Jeśli to dlaczego nie jest widoczny, ale ta strona z dokumentów intellij dokładnie wyjaśnia, jak dodać org.jetbrains.annotations
biblioteka, zawierająca ich adnotacje o nieważności, dla swojego projektu. W rzeczywistości, te dokumenty wskazują na to, że menu quickfix naprawdę oferuje możliwość automatycznego dodawania tej biblioteki jako rozwiązanie błąd, który masz na swoim @NonNull
węzeł w kodzie źródłowym.
[1] Większość komentarzy z zerową wartością znacznie ograniczają się, pozwalając adnotację tylko dla pól, metod (co oznacza: że ona zwraca) i parametrów. Można jednak mieć na pewno nie zero List
z może być-zero Map
egzemplarze, które na pewno nie są pustymi String
to może być zero Integer
: @NonNull List<@Nullable Map<@NonNull String, @Nullable Integer>>
. System komentarzy jest w stanie pozwolić ci to napisać, ale tylko w przypadku, jeśli twoje adnotacje dostosowane wyłącznie do TYPE_USE. Adnotacje frameworka checker i eclipse nullity działają w podobny sposób; większość innych nie działają i dlatego są mniej wyraziste. CheckerFramework robi jeszcze jeden krok do przodu i pozwala ci napisać pojęcie "albo nieważność-to jest w porządku". Tak samo, jak generyczne są 3 formy (List<Integer>
i List<? super Integer>
i List< extends Integer>
jak tylko zaangażowane uniwersalne, 2 wartości null (lub nigdy nie jest równa zero, albo na pewno jest dozwolone wartość null) już za mało, trzeba więcej wartości null. struktura kontroli ma @PolyNull
wola pozwala ci komunikować pustki: można, na przykład, napisać ten metoda w checkerframework, ale nie można napisać go poprawnie z pomocą intellij lub, jeśli o to chodzi, eclipse:
public void duplicateFirstMatch(List<T> elems, Predicate<T> matcher);
gdzie pomysł: metoda Ta uruchamia program rozpoznawania nazw dla każdego elementu na liście, i gdy przypadkiem ten element jest dodawany na końcu listy. Ta metoda może zadziałać, jeśli T
jest uważany za "@NonNull " (biorąc pod uwagę, że w kodzie nie ma zer, null nigdy nie może być dodana tym kodem, więc nie może naruszać wartość niezerową jego elementów), ale działa tak samo dobrze, jeśli T
jest @Nullable
pod warunkiem, że odebrano również ma @Nullable T
oczywiście: teraz ten kod może dodać null do listy, ale to jest w porządku.
W ten sposób T
nie jest ani nieważności, ani zera, ale Ts, o których mowa w podpisie, muszą być zgodne z ich nieważności. @PolyNull
rozwiązuje ten problem.