首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@NotNull、@NotNull等在IntelliJ IDEA中都不起作用

@NotNull、@NotNull等在IntelliJ IDEA中都不起作用
EN

Stack Overflow用户
提问于 2017-04-12 14:14:45
回答 3查看 5K关注 0票数 4

我试过用

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

在所有情况下,向其分配null不会产生来自IntelliJ 2016.2的投诉。

代码语言:javascript
复制
public class GreetingController {
    @NotNull Integer x = 3;
    public void foo() { x = null; }
}

根据IntelliJ的说法,这一切都编译得很好。

此页来自IntelliJ明确指出"IntelliJ的想法突出了问题“,所以您可以在编辑器中看到检查结果。我甚至将示例代码(public class TestNullable)复制到我的编辑器中,它不会产生任何错误。

来自IntelliJ的另一页声明您可以更改它响应的注释。因此,我选择了javax.annotation.Nonnull,并确保这是我在代码中使用的,仍然没有运气。

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

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

我肯定这一定有用,我做错什么了?

我已经上传了一个不起作用的例子:邮编下载

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-04-12 17:01:49

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

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

您还可以更改检查的严重程度(例如出错):

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

  • IDEA-78625提供的检查严重性级别将像验证和中止编译一样工作。

值得注意的是,请注意javax.annotation.Nullable注释,它可能不是您所认为的那样,请参见这句话文档。多年来,IntelliJ IDEA错误地建议使用此注释,而对于这种情况,正确的注释是javax.annotation.CheckForNull

此注释主要用于重写Nonnull注释。静态分析工具通常应该将带注释的项视为没有注释,除非它们被配置为尽量减少假否定。使用CheckForNull指示应该始终检查元素值是否为空值。

票数 6
EN

Stack Overflow用户

发布于 2018-03-12 20:14:40

  1. “设置”>“检查”>“可能的错误”>“常量条件和例外”
  2. 勾选第一个选项:“建议@NotNull注释用于可能返回null并报告传递给非注释参数的可空值的方法。
  3. 单击“配置注释”。默认情况下,Intellij将使用来自org.jetbrains.annotation的自己的注释。我使用的是来自javax.annotation的更一般的注释(我自己的意见)。
  4. 我将Nullable设置为:javax.annotation.Nullable
  5. 我将NotNUll设置为:javax.annotation.NotNull
  6. 为了设置这些新选项,必须单击它们,然后单击右边的微小复选标记按钮来设置它。选择javax.annotation注释,然后按下"OK“将不会锁定新设置,必须使用复选框按钮。

成功指定javax.annotation.Nullablejavax.annotation.NotNull后,代码将正确突出显示空问题。

票数 4
EN

Stack Overflow用户

发布于 2017-04-12 16:49:41

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43372109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档