Mic*_*ael 37 java generics language-design java-8
当滚动浏览java.util包的文档时,我很惊讶地发现它Optional<T>并且OptionalInt彼此没有任何关系.这似乎很难相信,因为它表明它们是不相关的类.
OptionalInt课程呢?为什么你不能使用Optional<Integer>?我认为这是因为它int是原始的,但没有OptionalChar这样的设计选择是不一致的.zap*_*apl 31
Java 8引入了很多专用于原语的东西.原因很可能是拳击原语可以创造大量浪费的"盒子".
例如这个
OptionalInt optionalFirst = IntStream
.range(0, 100)
.filter(i -> i % 23 > 7)
.findFirst();
Run Code Online (Sandbox Code Playgroud)
在这里,Optional<Integer>结果将是不一致的.同样的方法也ifPresent(IntConsumer consumer)可以让IntStream世界保持这种状态.Optional<Integer>会迫使你转换(如果你愿意,你可以轻松做到)
有没有必要为特别支持char或short或byte因为所有的人都可以表示为int.缺少的是,boolean但由于只有2个值,因此在流中没有太多可以做的事情.
Jus*_*tin 12
需要有一个OptionalIntJava 8流的类才能保持一致.如果你看一看的Stream类,你会看到很多 的 的 方式返回Optional<T>.然而,处理一个Stream<Integer>,Stream<Long>或基元的任何其他流是排气,所以有一个IntStream类和LongStream类替换其未装箱值的对象.例如,找到a元素的总和Stream<Integer>并不是微不足道的,而对于a IntStream,你只需要调用IntStream#sum
在这些课程中,JDK有益替换Optional<T>用OptionalInt,OptionalLong等.
OptionalInt是一个保存原始类型值的容器int。原始类型不能用作泛型类的类型参数,因此它不可能是Optional<T>.
| 归档时间: |
|
| 查看次数: |
9436 次 |
| 最近记录: |