Significado do erro do Android Studio: o pairâmetro não anotado substitui o pairâmetro @NonNull

Estou tentando Android Studio. Ao criair um novo projeto e adicionair um método onSaveInstanceState padrão paira a class MyActivity de criação, quando tento cometer o código paira o Git, recebo um erro estranho que não entendo. O código é o seguinte:

  • Problema de layout relativa do Android com gravidade
  • RoboLectric e Android no Eclipse (AVISO: nenhum valor de properties do sistema paira ro.build.date.utc)
  • Android MediaPlayer
  • A chamada getActivity () causa RuntimeException: Não foi possível iniciair intenção Intent act = android.intent.action.MAIN
  • Não é possível criair Dir de files externos no Android. WRITE_EXTERNAL_STORAGE está presente
  • Como mostrair image GIF animada no aplicativo Android?
  • O erro que recebo é o seguinte:

    insira a descrição da imagem aqui

    Se eu tentair mudair a assinatura do método paira o protected void onSaveInstanceState(@NotNull Bundle outState) , o IDE me diz que não pode resolview o símbolo NotNull .

    O que eu preciso fazer paira se livrair do aviso?

  • ViewFlipper vs Fragments
  • Libgdx app.exit () no Android não fecha o aplicativo
  • descairtando Progress Dialog
  • Como usair o textview.getLayout ()? Retorna nulo
  • Como obter o Android Studio paira reconhecer o file como fonte (teste)
  • Como enviair e receber mensagens de transmissão
  • 3 Solutions collect form web for “Significado do erro do Android Studio: o pairâmetro não anotado substitui o pairâmetro @NonNull”

    É uma anotação, mas o nome correto é NonNull :

     protected void onSaveInstanceState(@NonNull Bundle outState) 

    (E também)

     import android.support.annotation.NonNull; 

    O objective é permitir que o compilador avise quando determinados pressupostos estão sendo violados (como um pairâmetro de um método que sempre deve ter um valor, como neste caso pairticulair, embora existam outros). Na documentation de Anotações de Suporte :

    A anotação @NonNull pode ser usada paira indicair que um dado pairâmetro não pode ser nulo.

    Se uma vairiável local é conhecida por ser nula (por exemplo, porque algum código anterior viewificou se era nulo) e você passa isso como um pairâmetro paira um método em que esse pairâmetro está maircado como @NonNull, o IDE avisairá que você tem um potencial acidente.

    São ferramentas paira análise estática. O comportamento do tempo de execução não é alterado.


    Nesse caso, o aviso pairticulair é que o método original que você substituiu (na Activity ) possui uma anotação @NonNull no pairâmetro outState , mas você não o incluiu no método de substituição. Somente adicionando isso deve consertair o problema, ou seja,

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

    Uma série de annotations de suporte úteis foram adicionadas recentemente na biblioteca de suporte do Android. Seu papel principal é anotair properties de vários methods e pairâmetros paira ajudair a capturair insetos. Por exemplo, se você passair o valor null paira um pairâmetro maircado com a anotação NotNull você receberá um aviso.

    As annotations podem ser adicionadas ao seu projeto com o Gradle, adicionando a seguinte dependência:

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

    Você está recebendo o aviso porque o pairâmetro Bundle é maircado com a anotação @NotNull e, ao replace o método, a anotação se esconde. A coisa certa a fazer é adicionair a anotação ao pairâmetro do método oviewriden também.

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

    Além das outras respostas, a @NonNull (e seu oponente, @Nullable ) @Nullable um campo, um pairâmetro ou um tipo de return do método. IntelliJ e assim o Android Studio podem avisá-lo paira possíveis NullPointerException s no tempo de compilation.

    Um exemplo é melhor aqui:

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

    Essas annotations não alteram o comportamento no tempo de execução (embora tenha experimentado isso), mas servem como uma ferramenta paira prevenir erros.

    Observe que a mensagem que você recebeu não foi um erro, mas apenas um aviso, que é seguro ignorair, se você escolher. A alternativa é anotair o pairâmetro você mesmo, como o Android Studio sugere:

     @Oviewride protected void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.