Значение ошибки Android Studio: переопределенные параметры аннотированных параметров @NonNull

Я пробовал Android Studio. При создании нового проекта и добавлении метода по умолчанию onSaveInstanceState метода onSaveInstanceState умолчанию метод onSaveInstanceState, когда я пытаюсь передать код Git, я получаю странную ошибку, которую я не понимаю. Код выглядит так:

Ошибка, которую я получаю, такова:

Введите описание изображения здесь

Если я попытаюсь изменить подпись метода на protected void onSaveInstanceState(@NotNull Bundle outState) , тогда IDE protected void onSaveInstanceState(@NotNull Bundle outState) мне, что он не может разрешить символ NotNull .

Что мне нужно сделать, чтобы избавиться от предупреждения?

Это аннотация, но правильное имя NonNull :

 protected void onSaveInstanceState(@NonNull Bundle outState) 

(А также)

 import android.support.annotation.NonNull; 

Цель состоит в том, чтобы позволить компилятору предупреждать, когда нарушаются определенные допущения (например, параметр метода, который всегда должен иметь значение, как в данном конкретном случае, хотя есть и другие). Из документации поддержки аннотаций :

Аннотацию @NonNull можно использовать, чтобы указать, что данный параметр не может быть нулевым.

Если локальная переменная известна как нуль (например, потому что какой-то более ранний код проверял, был ли она пустой), и вы передаете это как параметр методу, где этот параметр отмечен как @NonNull, среда ID предупредит вас, что вы Потенциальная авария.

Это инструменты для статического анализа. Поведение во время выполнения не изменяется вообще.


В этом случае особое предупреждение заключается в том, что исходный метод, который вы переопределяете (в Activity ), имеет аннотацию outState параметра outState , но вы не включили его в метод переопределения. Просто добавьте его, чтобы исправить проблему, т.е.

 @Override protected void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); } 

Недавно в библиотеке поддержки Android был добавлен ряд полезных аннотаций поддержки. Их основная роль заключается в том, чтобы комментировать свойства различных методов и параметров, чтобы помочь поймать ошибки. Например, если вы передадите значение null параметру, отмеченному аннотацией NotNull вы получите предупреждение.

Аннотации могут быть добавлены в ваш проект с помощью Gradle, добавив следующую зависимость:

 dependencies { compile 'com.android.support:support-annotations:20.0.0' } 

Вы получаете предупреждение, потому что параметр Bundle помечен аннотацией @NotNull и переопределяет метод, по @NotNull аннотация. Правильная вещь – добавить аннотацию к параметру метода переопределения.

 @Override protected void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); } 

В дополнение к другим ответам, @NonNull (и ее противник, @Nullable ) аннотирует тип возвращаемого поля, параметра или метода. IntelliJ и, таким образом, Android Studio может предупредить вас о возможных NullPointerException s во время компиляции.

Пример лучше всего здесь:

 @NonNull private String myString = "Hello"; @Nullable private String myOtherString = null; @NonNull public Object doStuff() { System.out.println(myString.length); // No warning System.out.println(doSomething(myString).length); // Warning, the result might be null. doSomething(myOtherString); // Warning, myOtherString might be null. return myOtherString; // Warning, myOtherString might be null. } @Nullable private String doSomething(@NonNull String a) { return a.length > 1 ? null : a; // No warning } 

Эти аннотации не изменяют поведение во время выполнения (хотя я и экспериментировал с этим), но служат инструментом для предотвращения ошибок.

Обратите внимание, что полученное сообщение не было ошибкой, а просто предупреждением, которое можно игнорировать, если вы решите. Альтернативой является также аннотировать параметр самостоятельно, так как Android Studio предлагает:

 @Override protected void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); }