我正在浏览For-Each Loop
的Oracle文档,其中提到了
迭代器变量在每个循环中出现三次:这是两次出错的机会。
为什么有两次出错的机会?
它与以下代码片段有关:
void cancelAll(Collection<TimerTask> c) {
for (Iterator<TimerTask> i = c.iterator(); i.hasNext(); )
i.next().cancel();
}
据说,当您在迭代器声明(i.hasNext()
;i.next()
(之后引用迭代器时,您可能会意外地引用范围内的其他迭代器变量,或者省略其中一个,或者在循环中多次调用i.next()
,等等。
相比之下,每个循环一个:
void cancelAll(Collection<TimerTask> c) {
for (TimerTask t : c)
t.cancel();
}
您没有引用迭代器(不能引用它(,所以您不能犯同样的错误。