【发布时间】:2019-01-23 11:25:48
【问题描述】:
在 Java 中使用 Optionals 并不能防止 NPE,因为值仍然可以是 null:
Optional<String> myMethod() {
return null;
}
至少在运行时避免这种情况的一种方法是使用@NotNull 注释。 (在 Java 中编译时不可能,因为它没有非空引用,这与 Swift 和 Kotlin 等更复杂的语言相反)。
使用@NotNull会在检测到null时立即崩溃,从而防止null遍历程序,更容易定位错误源。它最好与单元测试结合使用,以使其能够抵御因重构而导致的破坏。
据我所知,将@NotNull 用于Optional 返回值和参数总是有意义的。
现在问题来了:
是否有可能让 Java 自动推断 @NotNull 以获取 Optional 返回值和参数? IE。我不必为每次使用都编写它,而是通过设置一些构建设置或类似的设置来实现这种行为?
【问题讨论】:
-
可以使用 return Optional.empty();
-
这听起来更像是 IDE 功能。
-
@SudhirOjha 不,如果
null尽早返回/接收,我想尽早发现错误。 -
@PinkieSwirl 更像是缺少的语言功能......也许它可以通过一些注释处理工具来解决?或者也许真的有一些 IDE 插件或 linter(CheckStyle?)可以帮助解决这个问题?
-
您可以将 CheckerFramework 添加到构建过程中:checkerframework.org/manual/#nullness-checker