To adnotacja, ale poprawna nazwa to NonNull
:
protected void onSaveInstanceState(@NonNull Bundle outState)
(I również)
import android.support.annotation.NonNull;
Ma to na celu umożliwienie kompilatorowi ostrzeżenia o naruszeniu pewnych założeń (takich jak parametr metody, który zawsze powinien mieć wartość, tak jak w tym konkretnym przypadku, chociaż są inne). Z dokumentacji adnotacji pomocy technicznej :
@NonNull
Adnotacja może być używany do wskazania, że dany parametr nie może być null.
Jeśli wiadomo, że zmienna lokalna ma wartość null (na przykład, ponieważ jakiś wcześniejszy kod sprawdzał, czy była pusta) i przekażesz to jako parametr do metody, w której ten parametr jest oznaczony jako @NonNull, IDE ostrzeże Cię, że masz potencjalna awaria.
Są narzędziami do analizy statycznej. W ogóle nie zmienia się zachowania środowiska wykonawczego.
W tym przypadku szczególnym ostrzeżeniem jest to, że oryginalna metoda, którą nadpisujesz (in Activity
), ma @NonNull
adnotację na outState
parametrze, ale nie uwzględniono go w nadpisywanej metodzie. Samo dodanie powinno rozwiązać problem, tj
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
}
NotNull
/NonNull
różnicy. Odpowiednio dostosowana odpowiedź.Wiele przydatnych adnotacji pomocy zostało niedawno dodanych do biblioteki obsługi Androida. Ich główną rolą jest opisywanie właściwości różnych metod i parametrów, aby pomóc wyłapać błędy. Na przykład, jeśli przekażesz
null
wartość do parametru, który jest oznaczonyNotNull
adnotacją, otrzymasz ostrzeżenie.Adnotacje można dodać do projektu za pomocą Gradle, dodając następującą zależność:
Otrzymujesz ostrzeżenie, ponieważ
Bundle
parametr jest oznaczony@NotNull
adnotacją i przez zastąpienie metody adnotacja zostaje ukryta. Należy również dodać adnotację do parametru nadpisanej metody.źródło
Oprócz innych odpowiedzi, adnotacja
@NonNull
(i jej przeciwnik@Nullable
) zawiera adnotacje dotyczące typu zwracanego pola, parametru lub metody. IntelliJ, a tym samym Android Studio, może ostrzec Cię o możliwychNullPointerException
problemach w czasie kompilacji.Najlepszym przykładem jest tutaj:
Te adnotacje nie zmieniają zachowania w czasie wykonywania (chociaż eksperymentowałem z tym), ale służą jako narzędzie do zapobiegania błędom.
Zwróć uwagę, że otrzymana wiadomość nie była błędem, ale tylko ostrzeżeniem, które można bezpiecznie zignorować, jeśli zdecydujesz się to zrobić. Alternatywą jest samodzielne opisanie parametru, jak sugeruje Android Studio:
źródło