我们在一个大项目中使用 GWT。在某些情况下,此代码可以产生NoSuchElementException
:
for (Object o: myList) {
}
里面没有对ArrayList的修改。
但这发生在最近。
在生成的应用程序的源代码中,我发现:
var context, context$iterator, operation;
operation = doDeserialize(this$static, ctx, json);
for (context$iterator =
new java_util_AbstractList$IteratorImpl_AbstractList$IteratorImpl__Ljava_util_AbstractList_2V(this$static.jetbrains_jetpad_otmodel_ot_persistence_OperationPersistenceContext_myContextDelegates);
context$iterator.java_util_AbstractList$IteratorImpl_i < context$iterator.java_util_AbstractList$IteratorImpl_this$0.size__I();
) {
context = java_util_AbstractList$IteratorImpl_$next__Ljava_util_AbstractList$IteratorImpl_2Ljava_lang_Object_2(context$iterator);
}
所以首先返回 true:iterator.i < iterator.size();
但在下一行(in .next())
代码也返回 true:iterator.i >= iterator.size();
我只能在 Chrome 中重现。