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

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

截图

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

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

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

但是我仍然必须在运行时检查空值,以防构建系统不理解Annotation并接受像new Car(null)这样的语句。 我错了吗?

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

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

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

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

因此,屏幕截图中显示的检查将完全合理。 如果您确实不希望看到空检查检查,请从首选项部分禁用它。

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