编译时间检查或java.util.ConcurrentModificationException

fas*_*ava 2 java concurrency loops concurrentmodification

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

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

Tim*_*der 7

一些实现List可以允许在add通过a 进行迭代时进行调用Iterator.例如,CopyOnWriteArrayList不会ConcurrentModificationException根据javadoc抛出一个.

为什么RuntimeException?因为程序员的工作是知道List所使用的特定实现是否允许该行为.对于它的价值,有像FindBugs这样的静态代码分析器可以警告你不要那样的危险模式.