java.lang.IllegalStateException: null with

出于某种原因,我从之前运行良好的方法中收到 java.lang.IllegalStateException: null 异常。我不认为我对此进行了任何更改。它只是突然停止工作,并且不会在每个条目上抛出错误,只是列表中 4. 的那个。我什至看不到那个条目有什么不同,它具有它应该具有的所有属性。


Iterator<Class> iter = contacts.iterator();


while (iter.hasNext()){

        Class holder = iter.next();

        try {

            if(dateNow.isBefore(holder.getStartDate())){

                iter.remove();

            }if(dateNow.isAfter(holder.getEndDate())){

                iter.remove();

            }else{

                boolean status = checkStatus(holder);

                if(!status){

                    iter.remove();

                }

            }

        }catch (NullPointerException e) {

            //No end-date or start date

            boolean status = checkStatus(holder);

            if(!status){

                iter.remove();

            }

            else if(dateNow.isBefore(holder.getStartDate())){

                iter.remove();

            }

        }

    }

正在抛出这个错误。我使用迭代器的唯一原因是我可以在迭代它时删除项目。


if(!status){

      iter.remove();

       }

是抛出错误的具体行, iter.remove() 部分。status 是错误的,这是应该的。


吃鸡游戏
浏览 376回答 3
3回答

陪伴而非守候

您的代码中有一个 IF 和一个 IF-ElSE,这是有意的还是您错过了那里的“其他”?如果没有这个“else”,您可能会在迭代中多次调用 iter.remove() 。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**if(dateNow.isAfter(holder.getEndDate())){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iter.remove(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**

GCT1015

看起来您可能试图从迭代器中删除相同的元素两次。我建议将逻辑更改为:&nbsp; &nbsp; &nbsp; &nbsp; if (dateNow.isBefore(holder.getStartDate())) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; iter.remove();&nbsp; &nbsp; &nbsp; &nbsp; } else if (dateNow.isAfter(holder.getEndDate())) { // notice the change here&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; iter.remove();&nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boolean status = checkStatus(holder);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(!status){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; iter.remove();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }现在,如果第一个条件为真(并被iter.remove()调用),else则不会执行该子句。我还建议避免NullPointerException而不是抓住它。例如:&nbsp; &nbsp; if (holder.getStartDate() != null && dateNow.isBefore(holder.getStartDate())){&nbsp; &nbsp; &nbsp; &nbsp; iter.remove();&nbsp; &nbsp; } else if(holder.getEndDate() != null && dateNow.isAfter(holder.getEndDate())){&nbsp; &nbsp; &nbsp; &nbsp; iter.remove();&nbsp; &nbsp; } else if (!checkStatus(holder)) {&nbsp; &nbsp; &nbsp; &nbsp; iter.remove();&nbsp; &nbsp; }

蝴蝶不菲

我不确定你的任务,这段代码能解决你的问题吗?contacts.stream().filter(x -> {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (dateNow.isBefore(holder.getStartDate()) || dateNow.isAfter(holder.getEndDate()) ){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return false;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boolean status = chackStatus(x);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!status){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return false;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return true;&nbsp; &nbsp; &nbsp; &nbsp; }).collect(Collectors.toList());
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java