gpt4 book ai didi

java - 为什么 java.util.Optional 不实现 Iterable?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:16:22 25 4
gpt4 key购买 nike

为什么 Java 8 的 Optional 没有实现 Iterable

我认为这是一种有意的语言选择,但我想知道为什么。 Scala 的Option 和Haskell 的Maybe 实现了类似于Iterable 的遍历方法。 FWIW,Java 9 将实现 Optional.stream() ( JDK-8050820 )。

最佳答案

我不是 Scala 或 Haskell 的专家,但我相信这些语言具有诸如序列理解之类的结构,这使得它对 OptionMaybe 非常有用成为 Traversable

Java 的 Iterable 可能类似于 Traversable 但 Java 语言的其余部分并没有提供太多支持。 Iterable 在 Java 中做的唯一一件事就是启用它在增强的 for(“for each”)循环中的使用。例如,考虑 Java 的 Optional 是否要实现 Iterable。这将允许像这样使用 Optional:

Optional<T> opt = ... ;
for (T t : opt) {
doSomethingWith(t);
}

将其写成循环有点误导,因为它执行零次或一次。为了减少误导,不妨这样写:

if (opt.isPresent()) {
doSomethingWith(opt.get());
}

或者最好

opt.ifPresent(this::doSomething);

我不知道 Optional 没有成为 Iterable 的原因。 Java 8 lambda 专家组举行了几次面对面的 session ,其中可能讨论了一堆事情,但从未写下来。我可以很容易地想象这个话题是在这样的 session 上提出的,并且由于存在更有用的替代方案(例如 ifPresent)而被认为不是很有用而被驳回。

关于java - 为什么 java.util.Optional 不实现 Iterable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40023850/

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