【发布时间】:2016-09-16 08:28:28
【问题描述】:
有谁知道为什么java.util.Spliterator 实现在循环体为空时使用do-while 而不是while 循环?比如forEachRemaining的实现是:
default void forEachRemaining(Consumer<? super T> action) {
do { } while (tryAdvance(action));
}
他们为什么要使用
do { } while (tryAdvance(action));
而不是
while(tryAdvance(action));
?
有什么我不知道的优点吗?
【问题讨论】:
-
所以两个循环都会运行,只要终止条件
tryAdvance(action)返回 true。 -
虽然这肯定是重复的,但我认为另一个问题中接受的答案并没有真正回答问题(相反,它提出了新的问题......)
-
纯粹是根据风格做出的选择。其他两种写法(
while (c());和while (c()) {}),在阅读代码时,似乎都提出了“这真的是作者的意思吗?”的问题,而我们确定的形式似乎最清楚地表达意图。您的意见可能会有所不同。 -
@BrianGoetz 那么,如果是风格问题,那么它与另一个问题的答案中隐含的隐藏同步无关?
-
在这种情况下不是;这种情况下的计算是纯线程本地的。
标签: java java-8 spliterator