2015-07-06 9 views
22

Dlaczego otrzymuję ostrzeżenie z inspekcji "NullableProblems" w IntelliJ na to:Niejasne ostrzegawcze inspekcja "NullableProblems" w IntelliJ

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

Używam IntelliJ 14.1.4 i kompilacji z Java 1.7

Zrzut ekranu:

enter image description here

Dodawanie @NotNull przed argumentem nie pomaga:

enter image description here

+0

Przeczytaj wszystko o '' @ Nullable'' i '' funkcji @ NotNull'' [tutaj] (https://www.jetbrains.com/idea/documentation/howto.html) –

+0

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

+3

@ davidgiga1993 Nie duplikat. Nadpisuję metodę, która nie ma adnotacji "@ NotNull". – traveh

Odpowiedz

18

Od Comparable.compareTo:

@throws NullPointerException if the specified object is null 

Więc IntelliJ wie, że obiekt nie powinien być null i dodaje @NotNull adnotacji automatically:

IntelliJ IDEA będzie uważnie przyjrzeć SDK i bibliotek kodu bajtowego i woli automatycznie rozpoznaje te adnotacje, aby później mogły zostać wykorzystane do analizy kodu źródłowego w celu wykrycia miejsc, w których pominięto wartość null.

Twoja metoda nadpisane nie obejmuje tej adnotacji, więc nadpisania to zachowanie składania pustych parametr - wbrew umowie interfejsu Comparable.

Można to rozwiązać, dodając przed parametrem @NotNull.

Można również wyłączyć tę kontrolę poprzez naciśnięcie alt + Wprowadź, wybierając ostrzeżenia w menu podręcznym i wybierając Disable inspection w podmenu.

Aby uzyskać więcej informacji na temat adnotacji, zapoznaj się z Web Help i this thread.

+4

Hmm, teraz rozumiem, skąd pochodzi oryginalne ostrzeżenie (sprawdzanie super klasy było pierwszą rzeczą, którą sprawdziłem), ale kiedy dodałem "@ NotNull", to nie wyczyściło ostrzeżenia ... (zaktualizowane oryginalne pytanie z zrzutem ekranu) . – traveh

+3

Używasz "niewłaściwej" adnotacji '@ NotNull'. Jest tam kilka notatek NotNull/NonNull (http://stackoverflow.com/questions/4963300/which-notnull-java-annotation-ould-i-use), z których nie ma w JDK. Będziesz musiał uwzględnić i użyć jednego z nich. Sprawdź także [Pomoc internetowa] (https://www.jetbrains.com/idea/documentation/howto.html). –

+2

Ha! Dziwne, kiedy dodałem @NotNull, import jest tym, co IntelliJ dodał automatycznie (po tym jak mam na myśli alt-enter). Spojrzałem na inne pytanie, z którym się łączyłeś i zakładam, że "com.intellij.annotations.NotNull" jest poprawną adnotacją, ale wydaje się, że IntelliJ nie może znaleźć klasy ... – traveh

0

Jego dlatego, że są nadrzędne metodę, która nie posiada @NotNull adnotacji.

IntelliJ IDEA ostrzega, jeśli metoda przesłaniania nie ma adnotacji @NotNull.

+0

Nie. Sprawdź interfejs. – traveh

4

To może być globalnie skonfigurowane w IntelliJ IDEA łatwo i dla mnie jest to zalecany sposób. Jeśli chcesz, możesz dodać własne adnotacje.
tj javax.validation.constraints.NotNull

Ścieżka do ustawienia:
Settings > Editor > Inspections > @NotNull/@Nullable problems > Configure annotations

Niektóre screeny: enter image description here enter image description here

Powiązane problemy