public void clearTrash()
{
for (Email i1 : trash.getEmails()) trash.removeEmail(trash.getEmails().indexOf(i1));
}
我认为如果trash.getEmails()为空则会返回,因为没有任何内容可以迭代,但是在调试空文件夹时会抛出NullPointerException。为什么不起作用?
答案 0 :(得分:2)
我不确定这个foreach
循环背后的逻辑是什么,但我建议您在迭代时使用Iterator
删除项目,即:
Iterator<Email> it = trash.iterator();
while (it.hasNext()) {
// some logic ....
it.remove();
}
至于您的NPE,可能trash
或trash.getEmails()
可能为空。检查空值!
答案 1 :(得分:0)
您的trash
var为null
或列表trash.getEmails()
为空
所以当你使用它时,它就像
for(Email i1 : null)
在使用之前,请尝试使用它来评估您的列表:
if (trash != null) {
//some logic here...
if (trash.getEmails() != null) {
for(Email i1 : null) {
//your code...
}
}
}
另外,作为旁注,创建新列表而不是删除所有元素会更好。
//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>);
答案 2 :(得分:0)
始终将Defensive programming合并到您的代码中。
无论你在哪里看到一个对象,都要想想如果它是null就该怎么办,如果它不是null,那该怎么办。
如下所示,您可以实施。
if(object==null){
//doSomething()
}else{
//doSomethingElse()
}
检查垃圾是否为空。
答案 3 :(得分:0)
使用org.apache.commons.collections.CollectionUtils
if(CollectionUtils.isNotEmpty(trash.getEmails()){
//Your logic.
}
isNotEmpty()将检查null和空List。
答案 4 :(得分:0)
请参阅以下主题以获得更好的理解:How does a for each loop guard against an empty list?
在您的情况下,收集垃圾是 null 。因此,当您取消引用垃圾时,您会收到空指针异常。所以它不是空容器,它给你空指针异常,而是解除引用trash(null对象),导致空指针异常。