Вопрос по java, iterator, java-ee – итератор hasnext () возвращает true, но next () выбрасывает NoSuchElementException

3

Когда я отладил свой код, я обнаружил, что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();
    }
}

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

в то время как цикл введен, и исключение выдается при следующем вызове (). и нет другого потока, пытающегося изменить его, что мне делать? z22
Вы не нуждаетесь вisEmpty проверьте там; если он пустwhile цикл просто не будет введен Joey
@ Raze2dust, если вы попытаетесь изменить коллекцию, когда итератор итерирует ее - итератор сгенерирует исключение IllegalArgumentException - это & quot; fail-fast & quot; свойство класса Iterator. alfasin
и если вы сделаете этоIterator<TradeStock>Вы не должны проходить кастинг. Hari Menon
Что касается исключения, любые другие потоки пытаются изменить этот итератор Hari Menon

Ваш Ответ

2   ответа
1

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

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

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

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

Похожие вопросы