Относительно этого фрагмента кода:
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();
}
вы не ссылаетесь на итератор (вы не можете ссылаться на него), поэтому вы не можете делать те же ошибки.