首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Spliterator<?>将NONNULL定义为一个特性?

为什么Spliterator<?>将NONNULL定义为一个特性?
EN

Stack Overflow用户
提问于 2015-04-01 20:49:13
回答 2查看 370关注 0票数 5

Spliterator定义了许多有意义的特征,比如SIZEDCONCURRENTIMMUTABLE等。

但是它也定义了NONNULL;为什么?

不过,我认为用户有责任确保这一点,例如,如果开发人员试图在有空元素的情况下.sort()SORTED流,那么他/她理应得到NPE的欢迎。

但这样的特性就存在了。为什么?Spliterator的javadoc本身没有提到它的任何实际用法,java.util.stream包的package-info.java也没有提到.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-02 09:15:37

来自Spliterator的文档

分配器还报告了一组来自characteristics()ORDEREDDISTINCTSORTEDSIZEDNONNULLIMMUTABLECONCURRENTSUBSIZED中的结构、源和元素。Spliterator客户端可以使用这些工具来控制、专门化或简化计算。

请注意,它没有提到NullPointerException的预防。如果对可能包含null值的Stream进行排序,则提供能够处理nullComparator是您的责任。

第二句还明确指出,使用这些标志只是一种选择,而不是对“Spliterator客户端”的要求,这并不限于Stream的使用。

因此,不管Stream API的当前实现是否使用它,是否有可能获得有关NONULL特性的知识的优势?

我也这么想。实现可以分支到非null Spliterator的专用代码,以便利用null来表示特定状态,例如在处理第一个元素之前缺少值或初始值等。如果事实如此,用于处理可能包含nullStreams的实际实现代码是复杂的。但是,当然,您总是需要权衡简化一种情况是否证明代码重复是合理的。

但有时简化就像知道没有null值意味着您可以在内部使用一个不允许nullConcurrent…集合一样简单。

票数 3
EN

Stack Overflow用户

发布于 2015-04-01 22:11:35

我在枚举StreamOpFlag的代码中找到了以下注释。

代码语言:javascript
复制
// The following Spliterator characteristics are not currently used but a
// gap in the bit set is deliberately retained to enable corresponding
// stream flags if//when required without modification to other flag values.
//
// 4, 0x00000100 NONNULL(4, ...
// 5, 0x00000400 IMMUTABLE(5, ...
// 6, 0x00001000 CONCURRENT(6, ...
// 7, 0x00004000 SUBSIZED(7, ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29400536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档