IntelliJ中不明确的检查警告"NullableProblems"

tra*_*veh 30 java intellij-idea code-inspection

为什么我在IntelliJ的"NullableProblems"检查中收到警告:

public class Test implements Comparable<Test> {
    @Override
    public int compareTo(Test o) {
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用IntelliJ 14.1.4并使用Java 1.7进行编译

截图:

在此输入图像描述

@NotNull在参数之前添加没有帮助:

在此输入图像描述

Dar*_*Kay 23

来自Comparable.compareTo:

@throws NullPointerException if the specified object is null
Run Code Online (Sandbox Code Playgroud)

所以IntelliJ知道,对象不应该是自动null添加@NotNull注释:

IntelliJ IDEA将仔细查看SDK和库字节码,并自动推断这些注释,以便以后可以使用它们来分析源代码以找到忽略null的位置.

您的override方法不包含此批注,因此它会覆盖此行为,使参数可为空 - 与Comparable接口的合约相对.

您可以通过@NotNull在参数之前添加来解决此问题.

您也可以通过按Alt+ Enter,在弹出菜单中选择警告并Disable inspection在子菜单中选择来禁用此检查.

有关/ 注释的更多信息,请查看Web帮助此主题.@NotNull@NonNull

  • 嗯,现在我明白原始警告来自哪里(检查超级类是我检查的第一件事),但是当我添加`@NotNull`时它没有清除警告...(更新原始问题与屏幕截图). (7认同)
  • 您正在使用"错误的"`@NotNull`注释.有几个[NotNull/NonNull注释](http://stackoverflow.com/questions/4963300/which-notnull-java-annotation-should-i-use),其中没有包含在JDK中.您需要包含并使用其中之一.另请参阅[Web帮助](https://www.jetbrains.com/idea/documentation/howto.html). (3认同)
  • 哈!奇怪的是,当我添加@NotNull时,导入是IntelliJ自动添加的(在我输入alt-enter之后).我查看了你链接到的另一个问题,我认为`com.intellij.annotations.NotNull`是正确的注释,但似乎IntelliJ找不到类... (2认同)

mag*_*ter 13

这可以在IntelliJ IDEA中轻松全局配置,对我个人来说是推荐的方式.如果您愿意,可以添加自己的注释.
javax.validation.constraints.NotNull

设置路径:
Settings > Editor > Inspections > @NotNull/@Nullable problems > Configure annotations

一些截图: 在此输入图像描述 在此输入图像描述