0
public void clearTrash()
{
    for (Email i1 : trash.getEmails()) trash.removeEmail(trash.getEmails().indexOf(i1));
}

繰り返し処理するものが何もないため、trash.getEmails() が空の場合、これは単純に返されると思いましたが、空のフォルダーでデバッグすると NullPointerException がスローされます。なぜそれがうまくいかないのですか?

4

5 に答える 5

2

foreachこのループの背後にあるロジックが何であるかはわかりませんがIterator、反復中にアイテムを削除するために使用することをお勧めします。

Iterator<Email> it = trash.iterator();
while (it.hasNext()) {
    // some logic ....
    it.remove();
}

あなたのNPEに関しては、おそらくtrashまたは多分trash.getEmails()nullです。nullをチェックしてください!

于 2012-04-27T04:56:36.780 に答える
0

org.apache.commons.collections.CollectionUtilsを使用する

 if(CollectionUtils.isNotEmpty(trash.getEmails()){

    //Your logic.
 }

isNotEmpty() は、空のリストだけでなく null もチェックします。

于 2014-03-20T14:24:46.863 に答える
0

あなたのtrashvarがそうであるnullか、リストtrash.getEmails()がnullです

だからあなたがそれを使うとき、そのような

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>); 
于 2012-04-27T04:44:25.480 に答える
0

コードには常に防御的プログラミングを組み込みます。

オブジェクトがどこにあるとしても、null の場合はどうするか、null でない場合はどうするかを考えてください。

以下のように実装できます。

    if(object==null){
    //doSomething()
    }else{
//doSomethingElse()
    }

ごみ箱が null かどうかを確認します。

于 2012-04-27T04:57:07.447 に答える