@ NotNull,@ Nonnull等在IntelliJ IDEA中均不起作用

Adr*_*ith 4 intellij-idea

我尝试用以下方式注释字段

  • org.checkerframework.checker.nullness.qual.NonNull
  • org.jetbrains.annotations.NotNull
  • javax.annotation.Nonnull

并且在所有情况下,为其分配null不会引起IntelliJ 2016.2的投诉。

public class GreetingController {
    @NotNull Integer x = 3;
    public void foo() { x = null; }
}
Run Code Online (Sandbox Code Playgroud)

根据IntelliJ,所有这些都可以正常编译。

IntelliJ的此页面特别指出:“ IntelliJ IDEA即时显示了问题,因此您可以在编辑器中直接查看检查结果。” 我什至将示例代码(public class TestNullable)复制到了我的编辑器中,它不会产生任何错误。

IntelliJ的另一个页面指出您可以更改其响应的注释。所以我选择了javax.annotation.Nonnull,并确保那是我在代码中使用的那个,仍然没有运气。

明确地说,我希望提供的是我所希望的,并且是我所理解的是,编辑器窗口/编译器使我警惕了这个问题(我不是在寻找运行时检查,NullPointerException在运行时已经可以正常工作。)

如果它不能实时运行,我尝试了“重建项目”。

我确定这一定可行,我做错了什么?

我已经上传了一个无法在此处使用的示例:ZIP下载

Cra*_*der 6

从您的屏幕截图和示例项目中可以看到,IntelliJ IDEA 确实向您显示警告。请注意,这些警告由即时运行的代码检查显示,并将显示在编辑器或Analyze | Analyze中。检查代码结果。编译器不会显示这些警告。

警告

请注意,您可以根据需要配置突出显示警告的内容(例如,添加欠波效果):

警告

您还可以更改检查的严重性(如“错误”):

严重程度

您可能还想对此功能要求进行投票:

  • IDEA-78625提供检查严重性级别,该级别将类似于验证和中止编译

另外,请注意javax.annotation.Nullable注释,它可能不是您想要的,请参阅此注释文档。多年来,IntelliJ IDEA错误地建议使用此批注,而针对此类情况的正确批注为javax.annotation.CheckForNull

该注释主要用于覆盖Nonnull注释。静态分析工具通常应将带注释的项目视为没有注释,除非将它们配置为最大程度地减少假阴性。使用CheckForNull表明,该元素的值应该总是空值进行检查。