为什么 Spliterators.spliteratorUnknownSize() 不是后期绑定?
Why is Spliterators.spliteratorUnknownSize() not late-binding?
我今天阅读了有关拆分器的内容,并使用 Spliterators.spliteratorUnknownSize(iterator(), Spliterator.NONNULL)
实现了一个。根据 spliteratorUnknownSize()
的文档
The [resulting] spliterator is not late-binding
作为分离器的新手,我想知道为什么会这样。如果我确保 iterator()
是后期绑定的,那么生成的拆分器也应该是,不是吗? spliteratorUnknownSize()
只是创建一个 IteratorSpliterator
,它还没有绑定到元素源。
也就是说,我很想了解为什么生成的拆分器不是后期绑定的。谢谢。
根据 javadocs:
"A Spliterator
that does not report IMMUTABLE
or CONCURRENT
is expected to have a documented policy concerning: when the Spliterator
binds to the element source; and detection of structural interference of the element source detected after binding. A late-binding Spliterator
binds to the source of elements at the point of first traversal, first split, or first query for estimated size, rather than at the time the Spliterator
is created. A Spliterator
that is not late-binding binds to the source of elements at the point of construction or first invocation of any method. Modifications made to the source prior to binding are reflected when the Spliterator
is traversed. After binding a Spliterator
should, on a best-effort basis, throw ConcurrentModificationException
if structural interference is detected. ..."
因此,如果您仔细分析,late-binding 与 non-late-binding 的真正区别在于何时检测到结构干扰英寸
一个 Spliterator
包装一个 任意 迭代器不能保证检测到结构干扰。这取决于 Iterator
是如何实现的。即使 Iterators
检测(或减轻)结构干扰,Spliterator
也无法保证检测何时开始;即当 "binding" 发生时。
简而言之,它不能保证真正的后期绑定语义。
If I ensure iterator()
to be late-binding, the resulting Spliterator
should also be, no?
javadocs 不保证这一点。
在实践中:它可能应该是,尽管它取决于 Spliterators
的实现。但是在 javadocs 中做出这样的声明可能会限制 future 版本的 Spliterators
class 及其嵌套 classes 的实现方式有害。
你可能不同意我的分析。然而,javadocs 的作者已经明确和故意声明这些 Spliterators
不是后期绑定的。如果您认为他们对此有误,请针对 javadoc 提出错误报告。
我今天阅读了有关拆分器的内容,并使用 Spliterators.spliteratorUnknownSize(iterator(), Spliterator.NONNULL)
实现了一个。根据 spliteratorUnknownSize()
的文档
The [resulting] spliterator is not late-binding
作为分离器的新手,我想知道为什么会这样。如果我确保 iterator()
是后期绑定的,那么生成的拆分器也应该是,不是吗? spliteratorUnknownSize()
只是创建一个 IteratorSpliterator
,它还没有绑定到元素源。
也就是说,我很想了解为什么生成的拆分器不是后期绑定的。谢谢。
根据 javadocs:
"A
Spliterator
that does not reportIMMUTABLE
orCONCURRENT
is expected to have a documented policy concerning: when theSpliterator
binds to the element source; and detection of structural interference of the element source detected after binding. A late-bindingSpliterator
binds to the source of elements at the point of first traversal, first split, or first query for estimated size, rather than at the time theSpliterator
is created. ASpliterator
that is not late-binding binds to the source of elements at the point of construction or first invocation of any method. Modifications made to the source prior to binding are reflected when theSpliterator
is traversed. After binding aSpliterator
should, on a best-effort basis, throwConcurrentModificationException
if structural interference is detected. ..."
因此,如果您仔细分析,late-binding 与 non-late-binding 的真正区别在于何时检测到结构干扰英寸
一个 Spliterator
包装一个 任意 迭代器不能保证检测到结构干扰。这取决于 Iterator
是如何实现的。即使 Iterators
检测(或减轻)结构干扰,Spliterator
也无法保证检测何时开始;即当 "binding" 发生时。
简而言之,它不能保证真正的后期绑定语义。
If I ensure
iterator()
to be late-binding, the resultingSpliterator
should also be, no?
javadocs 不保证这一点。
在实践中:它可能应该是,尽管它取决于 Spliterators
的实现。但是在 javadocs 中做出这样的声明可能会限制 future 版本的 Spliterators
class 及其嵌套 classes 的实现方式有害。
你可能不同意我的分析。然而,javadocs 的作者已经明确和故意声明这些 Spliterators
不是后期绑定的。如果您认为他们对此有误,请针对 javadoc 提出错误报告。