作者:平凡小几 | 来源:互联网 | 2023-02-06 19:08
我尝试用以下方式注释字段
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的此页面特别指出:“ IntelliJ IDEA即时显示了问题,因此您可以在编辑器中直接查看检查结果。” 我什至将示例代码(public class TestNullable
)复制到了我的编辑器中,它不会产生任何错误。
IntelliJ的另一个页面指出您可以更改其响应的注释。所以我选择了javax.annotation.Nonnull,并确保那是我在代码中使用的那个,仍然没有运气。
明确地说,我希望提供的是我所希望的,并且是我所理解的是,编辑器窗口/编译器使我警惕了这个问题(我不是在寻找运行时检查,NullPointerException在运行时已经可以正常工作。)
如果它不能实时运行,我尝试了“重建项目”。
我确定这一定可行,我做错了什么?
我已经上传了一个无法在此处使用的示例:ZIP下载。
1> CrazyCoder..:
从您的屏幕截图和示例项目中可以看到,IntelliJ IDEA 确实向您显示警告。请注意,这些警告由即时运行的代码检查显示,并将显示在编辑器或Analyze | Analyze中。检查代码结果。编译器不会显示这些警告。
请注意,您可以根据需要配置突出显示警告的内容(例如,添加欠波效果):
您还可以更改检查的严重性(如“错误”):
您可能还想对此功能要求进行投票:
IDEA-78625提供检查严重性级别,该级别将类似于验证和中止编译
另外,请注意javax.annotation.Nullable
注释,它可能不是您想要的,请参阅此注释和文档。多年来,IntelliJ IDEA错误地建议使用此批注,而针对此类情况的正确批注为javax.annotation.CheckForNull
:
该注释主要用于覆盖Nonnull
注释。静态分析工具通常应将带注释的项目视为没有注释,除非将它们配置为最大程度地减少假阴性。使用CheckForNull
表明,该元素的值应该总是空值进行检查。