2015-07-06 4 views
22

Почему я получаю предупреждение от инспекции «NullableProblems» в IntelliJ на этом:Неясные предупреждения инспекции «NullableProblems» в IntelliJ

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

Я использую IntelliJ 14.1.4 и компиляции с Java 1.7

Скриншот:

enter image description here

Добавление @NotNull перед аргументом не поможет:

enter image description here

+0

Читайте все о '' @ Nullable'' и '' @ NotNull'' функций [здесь] (https://www.jetbrains.com/idea/documentation/howto.html) –

+0

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

+3

@ davidgiga1993 Не дубликат. Я переопределяю метод, который не содержит аннотации '@ NotNull'. – traveh

ответ

18

От Comparable.compareTo:

@throws NullPointerException if the specified object is null 

Так IntelliJ знает, что объект не должен быть null и добавляет @NotNull аннотаций automatically:

IntelliJ IDEA будет внимательно посмотреть на SDK и библиотеки байткод и будет выведите эти аннотации автоматически, чтобы впоследствии их можно было использовать для анализа исходного кода, чтобы определить места, где вы игнорировали нуль.

Ваш переопределенный метод не включает в себя эту аннотацию, так что переопределяет такое поведение делает Nullable параметра - по контракту интерфейса Comparable.

Вы можете решить эту проблему, добавив @NotNull перед параметром.

Вы также можете отключить эту проверку, нажав Alt + Введите, выбрав предупреждение в всплывающем меню и выбора Disable inspection в подменю.

Отъезд Web Help и this thread для получения дополнительной информации о @NotNull/@NonNull аннотаций.

+4

Хмм, теперь я понимаю, откуда приходит исходное предупреждение (проверка суперкласса была первой проверкой), но когда я добавил '@ NotNull', он не очистил предупреждение ... (обновленный исходный вопрос со снимком экрана) , – traveh

+3

Вы используете «неправильную» аннотацию '@ NotNull'. Существуют [несколько NotNull/NonNull аннотаций] (http://stackoverflow.com/questions/4963300/which-notnull-java-annotation-should-i-use), а не из них, включенных в JDK. Вам нужно будет включить и использовать один из них. Также ознакомьтесь с [Web Help] (https://www.jetbrains.com/idea/documentation/howto.html). –

+2

Ha! Странно, когда я добавил @NotNull, импорт - это то, что IntelliJ автоматически добавляет (после того, как я подразумеваю alt-enter). Я посмотрел на другой вопрос, с которым вы связались, и я полагаю, что 'com.intellij.annotations.NotNull' является правильной аннотацией, но кажется, что IntelliJ не может найти класс ... – traveh

0

Его, потому что вы перекрытый метод, не имеющий @NotNull аннотации.

IntelliJ IDEA предупреждает вас, если у метода переопределения нет аннотации @NotNull.

+0

Нет. Проверьте интерфейс. – traveh

4

Это может быть глобально настроено в IntelliJ IDEA легко и для меня лично рекомендуется. Если вы хотите, вы можете добавить свои собственные аннотации.
т.е. javax.validation.constraints.NotNull

Путь к установке:
Settings > Editor > Inspections > @NotNull/@Nullable problems > Configure annotations

Некоторые скриншоты: enter image description here enter image description here