【问题标题】:Make Java infer @NotNull for Optional Return Types使 Java 推断可选返回类型的 @NotNull
【发布时间】: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

标签: java optional notnull


【解决方案1】:

Optional 并非旨在仅保留非空值。它也可能包含空值。所以你的提议违背了 Optional 的设计。

【讨论】:

  • 我知道 Optional 类型的引用可能为空或 null。我想找到一种方法,在必要时使用辅助工具来保证 null 情况永远不会发生,或者至少在运行时立即抛出(如@NotNull 的情况)。
猜你喜欢
  • 1970-01-01
  • 2022-11-05
  • 2020-12-26
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
相关资源
最近更新 更多