2

下面的循环抛出ConcurrentModificationException. 它是否应该给出编译器错误。运行时异常的原因是什么?

final List<String> list = new ArrayList<String>();
list.add("AAAAAAAAAAAAA");
for (final String it : list) {
    System.out.println(it);
    list.add("SSSSSSSSSS");
}
4

2 回答 2

7

的一些实现List可能允许在add通过Iterator. 例如,CopyOnWriteArrayList不会ConcurrentModificationException根据javadoc抛出 a 。

为什么一个RuntimeException?因为程序员的工作是知道List所使用的特定实现是否允许这种行为。值得一提的是,有像 FindBugs 这样的静态代码分析器,它可以警告您注意这样的危险模式。

于 2013-02-25T22:30:04.173 回答
1

抛出异常是因为您在迭代列表时尝试修改列表。它可以避免用正常的迭代器迭代它的迭代器或一段时间。

于 2013-02-25T22:36:08.290 回答