0

私たちは皆、これが違法であることを知っており、次をスローしConcurrentModificationExceptionます。

for (Item i : theList) {
 if (i.num == 123)
  foo(i); // foo modifies theList
}

しかし、これはどうですか?

for (Item i : theList) {
 if (i.num == 123) {
  foo(i); // foo modifies theList
  break;
 }
}

theListsの iteratornextが呼び出される前にループが壊れているため、はありませんConcurrentModificationException。しかし、それは合法になりますか?

4

1 に答える 1

1

もう少し考えた後、私はそうしなければならないという結論に達しました。「解決策」は

for (Item i : theList) {
 if (i.num == 123) {
  theI = i;
  break;
 }
}
foo(theI);  // foo modifies theList

しかし、呼び出される頻度に関してはnext、まったく同じです。

于 2010-12-01T11:31:05.700 に答える