C'est une annotation, mais le nom correct est NonNull
:
protected void onSaveInstanceState(@NonNull Bundle outState)
(Et aussi)
import android.support.annotation.NonNull;
Le but est de permettre au compilateur d'avertir lorsque certaines hypothèses sont violées (comme un paramètre d'une méthode qui devrait toujours avoir une valeur, comme dans ce cas particulier, bien qu'il y en ait d'autres). Dans la documentation des annotations de support :
L' @NonNull
annotation peut être utilisée pour indiquer qu'un paramètre donné ne peut pas être nul.
Si une variable locale est connue pour être nulle (par exemple parce qu'un code antérieur a vérifié si elle était nulle) et que vous la transmettez en tant que paramètre à une méthode où ce paramètre est marqué comme @NonNull, l'EDI vous avertira que vous avez un crash potentiel.
Ce sont des outils d'analyse statique. Le comportement d'exécution n'est pas du tout modifié.
Dans ce cas, l'avertissement particulier est que la méthode d'origine que vous remplacez (dans Activity
) a une @NonNull
annotation sur le outState
paramètre, mais vous ne l'avez pas incluse dans la méthode de remplacement. Le simple fait de l'ajouter devrait résoudre le problème, c'est à dire
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
}
NotNull
/NonNull
différence. Réponse ajustée en conséquence.Un certain nombre d' annotations de support utiles ont été récemment ajoutées dans la bibliothèque de support Android. Leur rôle principal est d'annoter les propriétés de diverses méthodes et paramètres pour aider à détecter les bogues. Par exemple, si vous transmettez une
null
valeur à un paramètre marqué de l'NotNull
annotation, vous recevrez un avertissement.Les annotations peuvent être ajoutées à votre projet avec Gradle en ajoutant la dépendance suivante:
Vous recevez l'avertissement car le
Bundle
paramètre est marqué avec l'@NotNull
annotation et en remplaçant la méthode, l'annotation est masquée. La bonne chose à faire est d'ajouter également l'annotation au paramètre de la méthode surchargée.la source
En plus des autres réponses, l' annotation
@NonNull
(et son adversaire@Nullable
) annote un champ, un paramètre ou un type de retour de méthode. IntelliJ et donc Android Studio peuvent vous avertir d'éventuelsNullPointerException
s au moment de la compilation.Un exemple est le meilleur ici:
Ces annotations ne modifient pas le comportement d'exécution (bien que j'aie expérimenté cela), mais servent d'outil pour éviter les bogues.
Notez que le message que vous avez reçu n'était pas une erreur, mais juste un avertissement, que vous pouvez ignorer en toute sécurité si vous le souhaitez. L'alternative consiste à annoter vous-même le paramètre, comme le suggère Android Studio:
la source