итератор hasnext () возвращает true, но next () выбрасывает NoSuchElementException

Когда я отладил свой код, я обнаружил, чтоhasNext() методIterator возвращенныйtrue, ноnext() метод скинул NoSuchElementException.

Ниже мой код:

 Collection<TradeStock> restBuy=em.createQuery("select t from TradeStock ...t.getResultList();

if(!restBuy.isEmpty())
{
    Iterator itrest=restBuy.iterator();
    while(itrest.hasNext())
    {
        TradeStock ts=(TradeStock)itrest.next();
        x+=ts.getTradeExecutedQuantity();
    }
}

Что я делаю не так?

 Hari Menon11 июн. 2012 г., 07:18
и если вы сделаете этоIterator<TradeStock>Вы не должны проходить кастинг.
 z2211 июн. 2012 г., 07:26
в то время как цикл введен, и исключение выдается при следующем вызове (). и нет другого потока, пытающегося изменить его, что мне делать?
 alfasin11 июн. 2012 г., 07:25
@ Raze2dust, если вы попытаетесь изменить коллекцию, когда итератор итерирует ее - итератор сгенерирует исключение IllegalArgumentException - это & quot; fail-fast & quot; свойство класса Iterator.
 Hari Menon11 июн. 2012 г., 07:18
Что касается исключения, любые другие потоки пытаются изменить этот итератор
 Joey11 июн. 2012 г., 07:17
Вы не нуждаетесь вisEmpty проверьте там; если он пустwhile цикл просто не будет введен

Ответы на вопрос(2)

Решение Вопроса

когда я перезапустил сервер и заново развернул свое приложение, так что, думаю, с кодом ничего не случилось, я не могу понять это странное поведение glassfish!

 11 июн. 2012 г., 08:13
Если бы я рискнул догадаться, это было бы то, что вы ранее внесли изменения и забыли повторно развернуть. (Или, может быть, повторное развертывание завершилось неудачно.) Таким образом, исходный код, который вы просматривали во время отладки, не совпадал с кодом, который фактически выполнялся.

ованием отладчика, как в Eclipse?
Если ваше оцененное выражение (Expressions вкладка в Eclipse) включает в себяitrest.next() затем отладчик вызываетnext() метод и изменяет состояние вашего итератора, без вашего кода об этом.
Попробуйте отладить это либо без оценкиitrest.next() или с сообщениями журнала

 09 нояб. 2014 г., 20:54
Я не могу в это поверить, это именно то, что произошло в моем случае. Я удалил все просматриваемые выражения и теперь все в порядке. +1 от меня

Ваш ответ на вопрос