2015-07-06 22 views
22

Perché mi appare un avvertimento da parte di ispezione "NullableProblems" in IntelliJ su questo:poco chiari di avvertimento ispezione "NullableProblems" in IntelliJ

public class Test implements Comparable<Test> { 
    @Override 
    public int compareTo(Test o) { 
     return 0; 
    } 
} 

sto usando IntelliJ 14.1.4 e la compilazione con Java 1.7

Screenshot:

enter image description here

Aggiunta @NotNull prima che l'argomento non aiuta:

enter image description here

+0

Leggi tutto di '' @ Nullable'' e '' caratteristiche @ NotNull'' [qui] (https://www.jetbrains.com/idea/documentation/howto.html) –

+0

Duplicato: http://stackoverflow.com/questions/24728627/misura-di-android-studio-error-not-annotated-parameter-overrides-nonnull-para – davidgiga1993

+3

@ davidgiga1993 Non è un duplicato. Sto sovrascrivendo un metodo che non ha l'annotazione '@ NotNull'. – traveh

risposta

18

Da Comparable.compareTo:

@throws NullPointerException if the specified object is null 

Così IntelliJ sa, che l'oggetto non dovrebbe essere null e aggiunge un @NotNull un'annotazione automatically:

IntelliJ IDEA esaminerà attentamente SDK e librerie bytecode e volontà dedurre automaticamente queste annotazioni in modo che possano essere successivamente utilizzate per analizzare il codice sorgente per individuare i punti in cui si è trascurato il valore null.

Il tuo metodo sovresposta non include questa annotazione, quindi è override questo comportamento rendendo il parametro nullable - contro il contratto dell'interfaccia Comparable.

È possibile risolvere questo problema aggiungendo @NotNull prima del parametro.

È anche possibile disattivare questo controllo premendo Alt + Invio, selezionando l'avviso nel menu a comparsa e selezionando Disable inspection nel sottomenu.

Scopri i Web Help e this thread per ulteriori informazioni circa @NotNull/@NonNull annotazioni.

+4

Hmm, ora capisco da dove proviene l'avviso originale (controllare che la super classe sia stata la prima cosa che ho controllato), ma quando ho aggiunto '@ NotNull' non ha cancellato l'avviso ... (domanda originale aggiornata con screenshot) . – traveh

+3

Si sta utilizzando l'annotazione "errata" '@ NotNull'. Ci sono [diverse annotazioni NotNull/NonNull] (http://stackoverflow.com/questions/4963300/which-notnull-java-annotation-should-i-use) là fuori, non incluse nel JDK. Dovrai includere e usare uno di questi. Controllare anche [Guida Web] (https://www.jetbrains.com/idea/documentation/howto.html). –

+2

Ha! Strano, quando ho aggiunto @NotNull l'importazione è ciò che IntelliJ ha aggiunto automaticamente (dopo alt-enter intendo). Ho esaminato l'altra domanda a cui ti sei collegato e presumo che "com.intellij.annotations.NotNull" sia l'annotazione corretta, ma sembra che IntelliJ non riesca a trovare la classe ... – traveh

0

suo perché questo modo si sostituisce un metodo che non ha un'annotazione @NotNull.

IntelliJ IDEA avverte se il metodo di sovrascrittura non ha un'annotazione @NotNull.

+0

No. Controlla l'interfaccia. – traveh

4

Questo può essere configurato a livello globale in IntelliJ IDEA facilmente e per me personalmente è il modo consigliato. Se vuoi puoi aggiungere le tue annotazioni.
cioè javax.validation.constraints.NotNull

Percorso per l'impostazione:
Settings > Editor > Inspections > @NotNull/@Nullable problems > Configure annotations

Alcuni screenshots: enter image description here enter image description here