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しながら を呼び出すことができます。たとえば、 javadocに従ってa をスローしません。addIteratorCopyOnWriteArrayListConcurrentModificationException

なぜRuntimeExceptionですか?List使用されている特定の実装がその動作を許可するかどうかを知るのはプログラマーの仕事だからです。それだけの価値はありますが、FindBugs のような静的コード アナライザーがあり、そのような危険なパターンに対して警告を発することができます。

于 2013-02-25T22:30:04.173 に答える
1

リストを繰り返し処理しているときにリストを変更しようとしているため、例外がスローされます。通常のイテレータでしばらくの間、イテレータを繰り返すことを避けることができます。

于 2013-02-25T22:36:08.290 に答える