Java 8 有许多 Optional 类,如 OptionalDouble
、OptionalInt
、OptionalLong
。
有没有一种很好的方法来处理同类的 Optional 值?也就是说,我希望能够做到:
OptionalDouble d1 = OptionalDouble.of(1.);
OptionalDouble d2 = OptionalDouble.of(2.);
OptionalDouble d3 = OptionalDouble.of(3.);
OptionalDouble result = d1.add(d2).multiply(d3);
当然,如果其中任何一个为“空”,则结果应该为空。在谷歌搜索了一下后,我发现了一些代码示例,人们在其中使用了这些函数(例如 add
),但它不是 API 的一部分(不再是了吗?)。
最佳答案
Optional
的主要目的|是代表一个函数的return value that might be absent .
对流进行原始特化的目的是避免装箱/拆箱开销。与 OptionalInt
和 friend 们有一个不可避免的装箱级别(如果它们不存在会更糟,因为替代方案是 Optional<Integer>
),但目的是让处理返回值的人立即取消装箱(或提供默认或如果不存在则抛出异常),然后从那时起处理实际的原语。
支持所有额外的 API 来对可选原语进行算术、比较等操作会增加更多的 API 膨胀。使用它会导致代码困惑、缓慢,与 Java 中已经存在的完美算术表达式语法相比,这是一个相当大的劣势。简而言之,在可选原语上添加一堆操作被认为没有用。
关于java - 对 Java 8 可选* 值的操作。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23414903/