2015-07-06 5 views
22

Warum bin ich von der "NullableProblems" Inspektion in IntelliJ auf diese eine Warnung erhalten:Unklare Inspektion Warnung "NullableProblems" in IntelliJ

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

Ich benutze IntelliJ 14.1.4 und Kompilieren mit Java 1.7

Screenshot:

enter image description here

@NotNull vor dem Argument Hinzufügen nicht hilft:

enter image description here

+0

Lesen Sie alles über '' @ Nullable'' und '' @ NotNull'' Features [hier] (https://www.jetbrains.com/idea/documentation/howto.html) –

+0

Duplizieren: http://stackoverflow.com/questions/24728627/meaning-of-android-studio-error-not-annotated-parameter-overrides-nonnull-para – davidgiga1993

+3

@ davidgiga1993 Kein Duplikat. Ich überschreibe eine Methode, die die Annotation "@ NotNull" nicht enthält. – traveh

Antwort

18

Von Comparable.compareTo:

@throws NullPointerException if the specified object is null 

So IntelliJ weiß, dass das Objekt nicht null sein soll und fügt eine @NotNull Anmerkung automatically:

IntelliJ IDEA wird an SDK sorgfältig prüfen und Bibliotheken Bytecode und wird diese Annotationen automatisch ableiten, so dass sie später verwendet werden können, um Quellcode zu analysieren, um Orte zu erkennen, an denen Sie Null übersehen haben.

Ihre überschriebene Methode nicht enthält diese Anmerkung, so dass es überschreibt dieses Verhalten die Parameter auf NULL festlegbare machen - gegen den Vertrag der Comparable Schnittstelle.

Sie können dies lösen, indem Sie @NotNull vor dem Parameter hinzufügen.

können Sie auch diese Prüfung deaktivieren, indem Alt-Taste + eingeben, die Warnung in dem Popup-Menü auswählen und Disable inspection im Untermenü auswählen.

Schauen Sie sich die Web Help und this thread für weitere Informationen über @NotNull/@NonNull Anmerkungen.

+4

Hmm, jetzt verstehe ich, woher die ursprüngliche Warnung kommt (die Überprüfung der Superklasse war das erste, was ich überprüft habe), aber als ich "@ NotNull" hinzufügte, löschte sie die Warnung nicht ... (aktualisierte Originalfrage mit Screenshot) . – traveh

+3

Sie verwenden die "falsche" '@ NotNull' Annotation. Es gibt [mehrere NotNull/NonNull-Annotationen] (http://stackoverflow.com/questions/4963300/which-notnull-java-annotation-should-i-use), von denen keine im JDK enthalten sind. Sie müssen einen davon hinzufügen und verwenden. Weitere Informationen finden Sie in der [Web-Hilfe] (https://www.jetbrains.com/idea/documentation/howto.html). –

+2

Ha! Seltsam, wenn ich @NotNull hinzugefügt habe, ist der Import das, was IntelliJ automatisch hinzugefügt hat (nach alt-enter meine ich). Ich habe mir die andere Frage angesehen, die Sie verlinkt haben, und ich nehme an, dass 'com.intellij.annotations.NotNull' die richtige Anmerkung ist, aber es scheint, dass IntelliJ die Klasse nicht finden kann ... – traveh

0

Sein, weil, dass Sie eine Methode überschreiben, die keine @NotNull Anmerkung hat.

IntelliJ IDEA warnt Sie, wenn die überschreibende Methode keine @NotNull Annotation hat.

+0

Nein. Überprüfen Sie die Schnittstelle. – traveh

4

Dies kann global in IntelliJ IDEA einfach konfiguriert werden und für mich persönlich ist der empfohlene Weg. Wenn Sie möchten, können Sie Ihre eigenen Anmerkungen hinzufügen.
dh javax.validation.constraints.NotNull

Pfad zur Einstellung:
Settings > Editor > Inspections > @NotNull/@Nullable problems > Configure annotations

Einige Screenshots: enter image description here enter image description here

Verwandte Themen