É uma anotação, mas o nome correto é NonNull
:
protected void onSaveInstanceState(@NonNull Bundle outState)
(E também)
import android.support.annotation.NonNull;
O objetivo é permitir que o compilador avise quando certas suposições estão sendo violadas (como um parâmetro de um método que deve sempre ter um valor, como neste caso particular, embora existam outros). Na documentação do Support Annotations :
A @NonNull
anotação pode ser usada para indicar que um determinado parâmetro não pode ser nulo.
Se uma variável local é conhecida como nula (por exemplo, porque algum código anterior verificou se ela era nula), e você passa isso como um parâmetro para um método onde esse parâmetro está marcado como @NonNull, o IDE irá avisá-lo que você um acidente potencial.
Eles são ferramentas para análise estática. O comportamento do tempo de execução não é alterado de forma alguma.
Nesse caso, o aviso específico é que o método original que você está substituindo (in Activity
) tem uma @NonNull
anotação no outState
parâmetro, mas você não a incluiu no método de substituição. Apenas adicioná-lo deve resolver o problema, ou seja,
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
}
NotNull
/NonNull
. Resposta ajustada em conformidade.Uma série de anotações de suporte úteis foram adicionadas recentemente à biblioteca de suporte do Android. Sua função principal é anotar propriedades de vários métodos e parâmetros para ajudar a detectar bugs. Por exemplo, se você passar o
null
valor para um parâmetro que está marcado com aNotNull
anotação, você receberá um aviso.As anotações podem ser adicionadas ao seu projeto com Gradle adicionando a seguinte dependência:
Você está recebendo o aviso porque o
Bundle
parâmetro está marcado com a@NotNull
anotação e, ao substituir o método, a anotação fica oculta. A coisa certa a fazer é adicionar a anotação ao parâmetro do método sobrescrito também.fonte
Além das outras respostas, a anotação
@NonNull
(e seu oponente@Nullable
) anota um tipo de retorno de campo, parâmetro ou método. O IntelliJ e, portanto, o Android Studio podem avisá-lo sobre possíveisNullPointerException
s no momento da compilação.Um exemplo é melhor aqui:
Essas anotações não alteram o comportamento do tempo de execução (embora eu tenha feito experiências com isso), mas servem como uma ferramenta para prevenir bugs.
Observe que a mensagem que você recebeu não foi um erro, mas apenas um aviso, que pode ser ignorado com segurança, se você quiser. A alternativa é anotar o parâmetro você mesmo também, como o Android Studio sugere:
fonte