fge*_*fge 5 java null java-8 java-stream
该的javadoc的Spliterator(这基本上是什么是真正的背后Stream,如果我理解正确的事情)定义了许多习性研究其意义如SIZED,CONCURRENT,IMMUTABLE等.
但它也定义了NONNULL; 为什么?
但是,我确定用户有责任确保这一点,例如,如果开发人员尝试.sort()使用无SORTED元素的非流媒体,他/她就会受到NPE的欢迎......
但是这个特征存在.为什么?的Javadoc,Spliterator本身并没有提到它的任何实际使用,而且也不该package-info.java在的java.util.stream包...
来自以下文档Spliterator:
\n\n\nSpliterator 还报告其结构、源以及、、、、、、和
\ncharacteristics()中的一组元素。Spliterator 客户端可以使用这些来控制、专门化或简化计算。ORDEREDDISTINCTSORTEDSIZEDNONNULLIMMUTABLECONCURRENTSUBSIZED
请注意,它没有提到预防NullPointerExceptions。如果您对Stream可能包含null值的 a 进行排序,则您有责任提供Comparator可以处理nulls 的 a 。
第二句话也明确指出,使用这些标志只是一个选项,而不是 \xe2\x80\x9cSpliteratorclients\xe2\x80\x9d 的要求,这不限于Streams 使用。
那么,无论 API 的当前实现是否使用它Stream,是否有可能获得有关某个NONULL特性的知识?
我想是这样。实现可以分支到非null Spliterator用于null表示某种状态的专用代码,例如处理第一个元素之前的缺失值或初始值等。事实上,处理Streams 的实际实现代码可能包含null :复杂的。但当然,您始终必须权衡一种情况的简化是否证明代码重复是合理的。
但有时简化很简单,因为知道没有null值意味着您可以使用内部Concurrent\xe2\x80\xa6不允许的 Collections之一。null
| 归档时间: |
|
| 查看次数: |
279 次 |
| 最近记录: |