gpt4 book ai didi

java - 在可为空的 Optional 中检索值的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-29 07:23:29 25 4
gpt4 key购买 nike

假设您有一个 Optional<T>可以采用 3 个值之一的变量:

  • 值(value)T
  • 其中包含空 T 的 Optional
  • 变量本身为空

检索值 T 的最佳方法是什么?或 null不然呢?

这是一种方法:

Optional<String> op = ...
String str = op != null ? op.orElse(null) : null;

还有一个方法:

String str = Optional.ofNullable(op).flatMap(innerOpt -> innerOpt).orElse(null);

各自的优缺点是什么?性能更高吗?还有一个类似 scala 的吗?一个更可读/可维护吗?

最佳答案

第一个可以简化为:

String str = op.orElse(null);

这将是您编写的最可读的可能性。

人们常说,Optional 不适用于 null 处理,但我认为这只是个人喜好问题。假设你必须像在 kotlin 中那样链接:

object?.child?.grandChild

在每个级别,我们都执行空值检查。在 Java 中它将是:

object == null ? null : (object.child == null ? null : object.child.grandChild)

这有点伤眼。它会写:

Optional.ofNullable(object)
.map(Parent::getChild)
.map(Child::getGrandChild)
.orElse(null);

可能有点冗长,但对我来说 - 非常可读。正如我所说 - 这是一个品味问题。

P.S.:Optional 是一种通过将 null 包装在 monad 中来简化处理的方法。不要让 Optionalnull!

关于java - 在可为空的 Optional 中检索值的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59291073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com