JD.CONCUR

JD.CONCUR は、イテレータがコレクション A に対して作成された後、そのコレクションから何かの要素が削除されてもループが停止しない場合に検出されます。詳細については、ConcurrentModificationException を参照してください。

脆弱性とリスク

下記の "next" メソッドの呼び出しでは、コードが ConcurrentModificationException をスローします。

軽減と防止

繰り返し中のオブジェクトは変更できません。削除する要素は別のコレクションに保存し、後で削除してください。または、コレクションをクローン化し、クローン化したバージョンでイテレータを使用してください。

例 1

コピー
     void fixList(Collection col) {
         for (Iterator iter = col.iterator(); iter.hasNext();) {
             String el = (String) iter.next();
             if (el.startsWith("/")) {
                 col.remove(el);
             }
         }
     }

JD.CONCUR が 14 行目に対して報告されています。'col' の間の繰り返し中に 'ConcurrentModificationException' が 'iter.next()' メソッドによってスローされる可能性があります。同一コレクションの繰り返し中にコレクション要素を削除することはできません。