Перед вашими глазами заглядывает еще один вопрос об ConcurrentModificationException, это не ваш типичный вопрос об ConcurrentModificationException.
Я понимаю исключения ConcurrentModificationExceptions, но не понимаю, почему я получаю один в следующем коде. В 'for' ниже, кажется, что итератор продолжает жить вне цикла for. (Используя отладчик в eclipse, я вижу, что итератор сохраняет свое значение modCount в jList при перезапуске цикла.)
public class ForEachTest {
public static void main(String[] args) {
List<Integer> zList = new LinkedList<Integer>();
List<Integer> jList = new LinkedList<Integer>();
jList.add(1);
while (true) {
for (Integer j : jList) {
zList.add(17);
System.out.println(j);
}
jList = zList;
}
}
}
Сначала я подумал, что это может быть проблемой синтаксического сахара, но я переписал его, используя явный итератор, и столкнулся с тем же поведением.
Наконец, я смог переписать его, разделив for на некоторое время с помощью отдельного шага инициализации, поэтому я не ищу переписать просто для того, чтобы заставить его работать. Но я хотел бы знать, в чем проблема с тем, как это показано здесь. Я бы предпочел использовать синтаксис for-each, если это возможно.