2015-08-11 15 views
15

questo: reprimere potenziale NullPointerException in Android Studio

@Nullable 
Item[] mItems; 

public Item getItem(int position) { 
    return mItems[position]; 
} 

produce l'avvertimento:

Array access 'mItems[position]' may produce NullPointerException 

voglio sopprimere questo avvertimento (so che getItem() non si chiamerà se mItems è null) .

Ho provato con le seguenti annotazioni:

  • @SuppressWarnings({"NullableProblems"})
  • @SuppressWarnings({"null"})

così come con la notazione //noinspection, ma non sono tutti al lavoro.

L'utilizzo di @SuppressWarnings({"all"}) funziona, ma ovviamente non è quello che sto cercando.

Android Studio non offre alcuna opzione di soppressione quando ho colpito alt + immettere, solo le opzioni per aggiungere un (inutile) di controllo nullo.

+2

Si prega di non cancellare e ri-post [la stessa domanda] (http: // StackOverflow com/q/31931636/113632); usa il pulsante "modifica" per aggiungere ulteriore contesto alla tua domanda. – dimo414

+0

@ dimo414 Il post precedente è stato un incidente (ho premuto invio mentre aggiungevo tag e lo postava), la domanda non era pronta. Ho provato a modificarlo in seguito, ma non è stato possibile. – minipif

risposta

3

Per me @SuppressWarnings non ha funzionato. Ho appena aggiunto la dichiarazione assert prima degli avvertimenti per farla andare via.

Il codice dovrebbe essere simile a questa:

@Nullable 
Item[] mItems; 

public Item getItem(int position) { 
    assert mItems != null; 
    return mItems[position]; 
} 

So che hai detto che sei sicuro che l'getItem() non sarà chiamato, se mItems è null. Tuttavia, l'ispettore non terrà conto del fatto che controlli già prima di chiamare la funzione, quindi l'avviso.

Oppure puoi semplicemente lasciarlo dal mItems = null non accadrà mai. Ma il tuo codice sembrerà un po 'disordinato e per me fastidioso.

+0

Questa è una soluzione elegante. –

24

Questo funziona per me, ma non so perché AS vorrebbe utilizzare condizioni costanti come il soppressore. Penso che abbia qualcosa a che fare con il controllo di salto nullo in quanto è una condizione costante (vale a dire, non sarà sempre nullo).

@Nullable 
Item[] mItems; 

@SuppressWarnings("ConstantConditions") 
public Item getItem(int position) { 
    return mItems[position]; 
} 
+3

Non so quale sia peggio, aggiungendo un gruppo di affermazioni non necessarie o SuppressWarnings con termini fuorvianti. Sospiro. –

9

Se si desidera impedire Android Studio da fastidio te con quegli avvertimenti, mentre il loro mantenimento nel compilatore semplicemente andare su Impostazioni -> Editor -> -> Controlli costanti condizioni ed eccezioni e deselezionare esso.

Se invece si desidera rimuovere completamente quindi utilizzare i SuppressWarnings corretto come suggerito dalle altre risposte:

@SuppressWarnings("ConstantConditions") 
Problemi correlati