Intellij idea @NotNull、@Nonnull等。全部不';在IntelliJ IDEA中不起作用

Intellij idea @NotNull、@Nonnull等。全部不';在IntelliJ IDEA中不起作用,intellij-idea,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()

我已尝试使用注释对字段进行注释

  • 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; }
}
根据IntelliJ,所有的编译都很好

特别指出“IntelliJ IDEA“在运行中”突出显示问题,因此您可以在编辑器中看到检查结果。”我甚至已将示例代码(
public class TestNullable
)复制到我的编辑器中,它不会产生任何错误

声明您可以更改它响应的注释。所以我选择了javax.annotation.Nonnull,并确保这就是我在代码中使用的那个,但仍然不走运

要明确的是,我希望并且我理解应该提供的是编辑器窗口/编译器会提醒我这个问题(我不是在寻找运行时检查,NullPointerException在运行时已经可以正常工作了)

为了防止它不能实时工作,我尝试了“重建项目”

我肯定这一定行得通,我做错了什么

我在这里上传了一个不起作用的例子:。

这可以做的最好的事情就是提供警告。它不会阻止编译的发生,因为注释不会禁止或阻止代码编译的发生

确保在IDE中启用了适当的检查,并确保您仍然知道要传递到方法中的参数。IDE最多只能警告您,但它不能真正阻止您


或者,如果该方法接收到空参数,则引入一个失败的单元测试,并依靠它来确保您没有违反代码或期望。

正如我从您的屏幕截图和示例项目IntelliJ IDEA中看到的那样。请注意,这些警告由正在运行的代码检查显示,并将显示在编辑器或分析|检查代码结果中。编译器不会显示这些警告

请注意,如果需要,您可以配置警告高亮显示(例如添加underwave效果):

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

您可能还想投票支持此功能请求:

  • 提供与验证和中止编译类似的检查严重性级别
作为奖励,请注意
javax.annotation.Nullable
注释,它可能不是您认为它的用途,请参见和。几年来IntelliJ IDEA一直错误地建议使用此注释,而这种情况下正确的注释应该是
javax.annotation.CheckForNull

此注释主要用于重写
Nonnull
注释。 静态分析工具通常应将注释项视为 尽管它们没有注释,除非配置为最小化 假阴性。使用
CheckForNull
指示元素值 应始终检查空值

  • “设置”>“检查”>“可能的错误”>“恒定条件和异常”
  • 勾选第一个选项:“为可能返回null的方法建议@NotNull注释,并报告传递给非注释参数的可为null的值
  • 单击“配置注释”。默认情况下,Intellij将使用
    org.jetbrains.annotation
    中自己的注释。我使用的是
    javax.annotation
    中更一般(我自己的意见)的注释
  • 我将Nullable设置为:
    javax.annotation.Nullable
  • 我将NotNUll设置为:
    javax.annotation.NotNUll
  • 要设置这些新选项,您必须单击它们,然后单击右侧的小复选标记按钮进行设置。选择
    javax.annotation
    注释,然后单击“确定”将不会锁定新设置,您必须使用复选框按钮

  • 成功指定
    javax.annotation.Nullable
    javax.annotation.NotNull
    后,代码正确地突出显示了空问题。

    是否已启用?能否显示编辑器的屏幕截图(完整IDE窗口)?I.可能是一个配置错误的项目,如源根目录外的Java文件、禁用检查、启用节能模式等。共享会有很大帮助。@CrazyCoder我在这里上传了一个示例:我是IntelliJ的新手(从今天开始),如果我导出的内容不适合您导入项目,请告诉我。我有一个使用
    javax.annotation.Nonnull
    的源文件。从屏幕截图可以看出,检查已启用,powersave未启用,但没有显示警告/错误。(同样与
    org.jetbrains.annotations.NotNull
    相同。)正如我从您的屏幕截图和示例项目IntelliJ IDEA中所看到的。请注意,这些警告由正在运行的代码检查显示,并将显示在编辑器或Analyze | Inspect code results中。编译器不会显示这些警告。@CrazyCoder谢谢!!颜色方案太复杂了微妙的是,我只是没有看到。我习惯于用红色波浪形下划线遮住。我花了一下午的大部分时间试图让它起作用:)如果你把它作为一个答案写下来,我会接受的。