根据javadocs:
“Spliterator
没有报告IMMUTABLE
或CONCURRENT
预期有关于以下方面的书面政策:何时Spliterator
与元素源结合;以及检测结合后检测到的元素源的结构干扰。后期结合Spliterator
在该点与元素源结合估计大小的第一次遍历、第一次拆分或第一次查询,而不是在Spliterator
创建时。Spliterator
非后期绑定的 A 在构造点或任何方法的第一次调用时绑定到元素的源。所做的修改到绑定之前的源在Spliterator
遍历时被反射。绑定后,Spliterator
应该尽最大努力,如果检测到结构干扰,则抛出ConcurrentModificationException
。......“
因此,如果您仔细分析,后期绑定与非后期绑定实际上是关于何时检测结构干扰。
Spliterator
包装任意迭代器不能保证检测到结构干扰。这取决于如何Iterator
实施。即使Iterators
确实检测(或减轻)结构干扰,Spliterator
也无法保证检测何时开始;即当“绑定”发生时。
简而言之,它不能保证真正的后期绑定语义。
如果我确保iterator()
后期绑定,结果Spliterator
也应该是,不是吗?
javadocs 不保证这一点。
在实践中:它可能应该是,尽管它取决于 Spliterators
. 但是在 javadocs 中做出这样的声明可能会以有害的方式限制类及其嵌套类的未来版本的实现。Spliterators
你可能不同意我的分析。然而,javadocs 的作者已经明确而有意地声明这些Spliterators
不是后期绑定的。如果您认为他们对此有误,请针对 javadocs 提出错误报告。