IntelliJ IDEA抱怨@NotNull参数的空检查

时间:2015-04-07 17:41:19

标签: java intellij-idea annotations notnull

我想在我的项目中使用Jetbrains @ Nullable / @NotNull Annotations。

screenshot

我有一个带有@NotNull字段的类。构造函数自然不接受null,而是抛出异常。当然,这个构造函数的参数也可以用@NotNull注释。

为什么IntelliJ IDEA会抱怨空检?文档说明:

  

使用NotNull注释的元素声明null值被禁止返回(对于方法),传递给(参数)并保持(局部变量和字段)。

但是我仍然需要在运行时检查null值,以防构建系统不理解Annotation并接受new Car(null)之类的语句。我错了吗?

3 个答案:

答案 0 :(得分:5)

如果使用JetBrains @NotNull注释,运行时断言将添加到已编译的字节码中,以保证null不会在那里传递。那么在源代码中编写相同的检查是没有意义的。这种方法对我们很有效。

如果您使用其他注释或者只是不想检测字节码,可以通过按Alt + Enter,“编辑检查设置”并选中“忽略断言语句”来禁用此特定警告。这些条件语句被IDE视为断言。

答案 1 :(得分:1)

如果构造函数的参数是Not Null,那么就没有用if和if语句来检查null值。

而且我们知道参数Engine保存的任何值都不为null,此检查将始终为false。

因此,屏幕截图中显示的检查将非常有意义。如果您真的不想看到空检查,请从首选项部分禁用它。

简而言之,您检查的值在构造函数中不为null,并且IDE知道它。

答案 2 :(得分:0)

他们希望您使用

        Objects.requireNonNull(engine, "engine");