我想在我的项目中使用Jetbrains @ Nullable / @NotNull Annotations。
我有一个带有@NotNull字段的类。构造函数自然不接受null
,而是抛出异常。当然,这个构造函数的参数也可以用@NotNull注释。
为什么IntelliJ IDEA会抱怨空检?文档说明:
使用NotNull注释的元素声明null值被禁止返回(对于方法),传递给(参数)并保持(局部变量和字段)。
但是我仍然需要在运行时检查null值,以防构建系统不理解Annotation并接受new Car(null)
之类的语句。我错了吗?
答案 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");