Java 8是否缺少OptionalBoolean?

作为一种原始的版本Optional*,爪哇1.8提供OptionalIntOptionalLongOptionalDouble

但是我找不到等效的OptionalBoolean类。

有什么技术上的理由反对OptionalBoolean吗?

  • 一个Optional可以或可以不具有一个值的情况下,使用作为替代null

回答:

该引用解释了使用原始流背后的注意事项。我假设同样适用于原始Optionals。简而言之,出于性能原因,创建了原始流(可能还包括Optionals)。他们没有为所有8种原始类型创建它们,以减少代码重复和接口污染。

在lambda邮件列表中引用Brian Goetz的话:

更笼统地说:拥有专门的原始流(例如IntStream)背后的哲学充满了令人讨厌的折衷。一方面,这有很多丑陋的代码重复,接口污染等。另一方面,盒装操作上的任何一种算法都糟透了,没有减少整数的故事会很糟糕。因此,我们处在艰难的境地,我们正在努力不使其变得更糟。

不使情况变得更糟的第一招是:我们没有做所有八种原始类型。我们正在做int,long和double;所有其他的都可以用这些来模拟。可以说我们也可以摆脱int,但是我们认为大多数Java开发人员都不准备为此做好准备。是的,将会有针对性格的呼吁,而答案是“将其粘贴在一个整数中”。(每个专业化项目预计将占用JRE约100K的空间。)

技巧2:我们正在使用原始流来公开在原始域中最好完成的事情(排序,归约),而不是尝试复制盒装域中可以做的所有事情。例如,正如Aleksey指出的那样,没有IntStream.into()。(如果有,下一个问题将是“

IntCollection在哪里?IntArrayList?IntConcurrentSkipListMap?”。)意图是许多流可能以引用流开始,最终以原始流结束,但是反之则不然。减少了所需的转换次数(例如,对于int->

T,没有映射重载;对于int-> T,没有函数的特殊化,等等)

我要提到的是,我在这个问题的答案中找到了这句话。

以上是 Java 8是否缺少OptionalBoolean? 的全部内容, 来源链接: utcz.com/qa/404832.html

回到顶部