Mar*_*son 32 java monads boolean optional java-8
作为一种原始的版本Optional
*,爪哇1.8提供OptionalInt
,OptionalLong
和OptionalDouble
.
但我找不到同等的OptionalBoolean
班级.
是否有任何技术原因反对OptionalBoolean
?
*
一个Optional
可以或可以不具有一个值的情况下,使用作为替代null
.
Era*_*ran 12
这句话解释了原始流背后的考虑因素.我假设同样适用于原始的Optionals.简而言之,出于性能原因,创建了原始流(也可能是Optionals).他们没有为所有8种原始类型创建它们,以减少代码重复和界面污染.
在lambda邮件列表中引用Brian Goetz的话:
更一般地说:拥有专门的原始流(例如,IntStream)背后的哲学充满了令人讨厌的权衡.一方面,它有很多丑陋的代码重复,界面污染等.另一方面,盒装操作上的任何类型的算术都很糟糕,并且没有减少过量的故事会很糟糕.所以我们处在一个艰难的角落,我们试图不让它变得更糟.
不让它变得更糟的技巧#1是:我们没有做所有八种原始类型.我们做的是int,long和double; 所有其他人都可以通过这些来模拟.可以说我们也可以摆脱int,但我们认为大多数Java开发人员都没有为此做好准备.是的,会有对Character的调用,答案是"坚持使用int".(每个专业化预计约为JRE足迹的100K.)
特技#2是:我们使用原始流来揭示在原始域中最好的事情(排序,减少)但不尝试复制你在盒装域中可以做的所有事情.例如,正如Aleksey指出的那样,没有IntStream.into().(如果有的话,下一个问题是"IntCollection在哪里?IntArrayList?IntConcurrentSkipListMap?"意图是许多流可以作为参考流开始并最终作为原始流,但反之亦然.那没关系,那就是减少了所需的转换次数(例如,int - > T没有map的重载,int的函数没有专门化 - > T等)
我应该提一下,我在这个问题的答案中找到了引用.
boolean
值经常被滥用作为参数.有效的Java第二版警告不要滥用布尔值.如果它们不是用于实际的布尔值true/false参数,它们通常会导致代码难以理解.相反,作家约书亚布洛赫试图说服人们使用双重价值enum
:
首选参数的两元素
enum
类型boolean
.它使您的代码更易于阅读和编写,尤其是在您使用支持自动完成的IDE时.此外,它还可以在以后轻松添加更多选项.
大多数OptionalBoolean
实例可能会被错误地使用.这是不包括一个的好理由.但我不能说 - 只有甲骨文可以 - 如果这就是它不存在的原因.
归档时间: |
|
查看次数: |
7902 次 |
最近记录: |