@NotNull,@ Nonull等都不在IntelliJ IDEA

时间:2017-04-12 14:14:45

标签: 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; }
}

根据IntelliJ,所有编译都很好。

This page from IntelliJ明确指出" IntelliJ IDEA“即时”突出显示问题,因此您可以直接在编辑器中查看检查结果。"我甚至将示例代码(public class TestNullable)复制到我的编辑器中,它不会产生任何错误。

This other page from IntelliJ表示您可以更改其响应的注释。所以我选择了javax.annotation.Nonnull,并确保这是我在代码中使用的那个,但仍然没有运气。

要清楚,我希望提供的内容以及我应该提供的内容是编辑器窗口/编译器提醒我问题(我不是在寻找运行时检查,NullPointerException已经正常工作了在运行时。)

如果它没有实时工作,我尝试了#34; Rebuild Project"。

我确定这一定必须奏效,我做错了什么?

我上传了一个不在此处的示例:ZIP download

3 个答案:

答案 0 :(得分:4)

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

warning

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

warning

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

severity

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

  • IDEA-78625提供与验证和中止编译相同的检查严重性级别

作为奖励,请注意 for(String word: listString){ if(sentence.contains(word){ sentence = sentence.replace(word,"<font color='red'>"+word+"</font>"); } } mTextView.setText(Html.fromHtml(sentence)); 注释,它可能不是您的想法,请参阅this commentdocumentation。有些年头,IntelliJ IDEA错误地建议使用此注释,而对于此类情况,正确的注释应为javax.annotation.Nullable

  

此注释主要用于覆盖javax.annotation.CheckForNull注释。   静态分析工具通常应将带注释的项目视为   虽然他们没有注释,除非他们配置为最小化   假阴性。使用Nonnull表示元素值   应始终检查空值。

答案 1 :(得分:0)

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

确保在IDE中启用了相应的检查,并确保您仍然知道要将哪些参数传递到方法中。 IDE最多可以警告你,但它不能真正阻止你。

或者,如果该方法接收到null参数,则引入单元测试失败,并依赖它来确保您不会破坏代码或期望。

答案 2 :(得分:0)

  1. “设置”&gt; “检查”&gt; “可能的错误”&gt; “恒定条件和例外”
  2. 勾选第一个选项:“为可能返回null的方法建议@NotNull注释,并报告传递给非注释参数的可空值。
  3. 点击“配置注释”。默认情况下,Intellij将使用org.jetbrains.annotation中自己的注释。我正在使用来自javax.annotation的更一般(我自己的意见)注释。
  4. 我将Nullable设置为:javax.annotation.Nullable
  5. 我将NotNUll设置为:javax.annotation.NotNull
  6. 要设置这些新选项,您必须单击它们,然后单击右侧的微小复选标记按钮进行设置。选择javax.annotation注释然后点击“确定”将如果没有锁定新设置,则必须使用复选框按钮。
  7. 成功指定javax.annotation.Nullablejavax.annotation.NotNull后,代码正确地突出显示了空问题。