JD.CONCUR

当为集合 A 创建迭代器,然后从该集合中移除某些元素,但循环没有停止时,出现 JD.CONCUR。有关详情,请参考 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);
             }
         }
     }

针对第 14 行报告 JD.CONCUR:可以通过方法“iter.next()”引发“ConcurrentModificationException”,并在“col”进行迭代。在一个集合上进行迭代时,不能移除该集合中的元素。