在java中迭代空容器时出现NullPointerException
我认为如果trash.getEmails()是空的,这将简单地返回,因为没有可迭代的内容,但在使用空文件夹进行调试时,它会抛出NullPointerException。为什么不起作用呢?您的在java中迭代空容器时出现NullPointerException,java,nullpointerexception,Java,Nullpointerexception,我认为如果trash.getEmails()是空的,这将简单地返回,因为没有可迭代的内容,但在使用空文件夹进行调试时,它会抛出NullPointerException。为什么不起作用呢?您的垃圾变量是null或者列表trash.getEmails()是null 所以当你使用它的时候 public void clearTrash() { for (Email i1 : trash.getEmails()) trash.removeEmail(trash.getEmails().indexO
垃圾变量是null
或者列表trash.getEmails()
是null
所以当你使用它的时候
public void clearTrash()
{
for (Email i1 : trash.getEmails()) trash.removeEmail(trash.getEmails().indexOf(i1));
}
在使用列表之前,请尝试对其进行评估:
for(Email i1 : null)
另外,作为补充说明,创建一个新列表比删除所有元素在性能上更好
if (trash != null) {
//some logic here...
if (trash.getEmails() != null) {
for(Email i1 : null) {
//your code...
}
}
}
//删除列表中的项目
//也许收藏不是列表,只是一个假设,想法还是一样的
垃圾。设置电子邮件(新列表);
我不确定此foreach
循环背后的逻辑是什么,但我建议您在迭代时使用迭代器来删除项,即:
//deleting the items in the List<Email>
//maybe the collection is not List, just a supposition, still the idea is the same
trash.setEmails(new List<Email>);
Iterator it=trash.Iterator();
while(it.hasNext()){
//有些逻辑。。。。
it.remove();
}
至于您的NPE,可能是垃圾桶
或垃圾桶。getEmails()
为空。检查空值 始终将其合并到代码中
无论在何处看到对象,都要考虑如果该对象为null该怎么办,如果该对象不为null该怎么办
如下面所示,您可以实现
Iterator<Email> it = trash.iterator();
while (it.hasNext()) {
// some logic ....
it.remove();
}
检查垃圾箱是否为空。使用
isNotEmpty()将检查null和空列表。请参阅以下线程以更好地理解:
在您的情况下,收集垃圾为null。因此,当您取消引用垃圾时,您会得到一个空指针异常。因此,不是空容器导致空指针异常,而是取消对垃圾箱(空对象)的引用导致空指针异常 你有没有检查垃圾对象是否为空?你能给出详细的堆栈跟踪吗?另外,如果您可以提供removeEmail()的源代码,这将非常有用。如果您可以提供一个else本身,则可以使用它来代替else。
if(object==null){
//doSomething()
}else{
//doSomethingElse()
}
if(CollectionUtils.isNotEmpty(trash.getEmails()){
//Your logic.
}