Проблема с переменной итератора, Oracle docs - PullRequest
0 голосов
/ 30 октября 2018

Я просматривал Документы Oracle для For-Each Loop и там упоминается

Переменная итератора встречается три раза в каждом цикле: это два шанса ошибиться.

Почему есть два шанса ошибиться?

1 Ответ

0 голосов
/ 30 октября 2018

Относительно этого фрагмента кода:

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();
}

вы не ссылаетесь на итератор (вы не можете ссылаться на него), поэтому вы не можете делать те же ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...