我遇到了一个奇怪的问题。获得java.util.ConcurrentModificationException
。但我不是在修改当前的集合。请帮忙。
方法调用
setAllAddress((List<AddressBean>) usrProfileResp.getAddressBeanList());
setShippingAddresses(getAllAddress());
方法
public List<AddressBean> getAllAddress() {
return allAddress;
}
public void setShippingAddresses(List<AddressTokenBean> shippingAddresses) {
shippingAddresses = new ArrayList<AddressBean>();
List<AddressBean> addresses = getAllAddress();
if (addresses != null && addresses.size() > 0) {
for (AddressBean addr : addresses) { // EXCEPTION OCCURS HERE
if (!Constants.BILLING_ADDRESS.equals(addr.getAddressType())) {
shippingAddresses.add(addr);
}
}
}
}
答案 0 :(得分:1)
最可能的解释是addresses
和shippingAddresses
指的是同一个集合。您可以在调试器中进行检查。
getAllAddresses()是否完全使用shippingAddresses?
你确定这个集合没有在另一个线程中被修改吗?这种情况是一直发生还是偶尔发生?
答案 1 :(得分:0)
我真的不明白为什么你们都会考虑发送地址? Vanathi说,在尝试迭代
时会发生异常在for-each循环中列出地址= getAllAddress();
。
因此应该有一个线程可以更改'addresses'引用的数组。 BTW会在第一次迭代期间发生异常或
'getAllAddresses'的实现如下:
public List getAllAddress(){ return allAddress; }
所以我得出结论,'allAddresses'只是某个类的数据成员。 这个类显然允许并发修改(另一个线程?) 这是你应该付出努力的地方......只需IMO:)
希望这有帮助