0

我遇到了一个奇怪的问题。得到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);                
                }
            }
        }
}
4

2 回答 2

1

最可能的解释是指addressesshippingAddresses是同一个集合。您可以在调试器中检查这一点。

getAllAddresses() 是否完全使用 shippingAddresses?

你确定这个集合没有在另一个线程中被修改吗?这种情况是一直发生还是偶尔发生?

于 2012-06-28T07:05:47.487 回答
0

我真的不明白为什么你们都考虑shippingAddresses?Vanathi 说,尝试迭代

列出地址 = getAllAddress();

在 for-each 循环中。

所以应该有一个线程来改变'addresses'引用的数组。顺便说一句,异常是否发生在第一次迭代或

您对“getAllAddresses”的实现如下:

公共列表 getAllAddress() { 返回所有地址;}

所以我得出结论,“allAddresses”只是某个类的数据成员。这个类显然允许并发修改(另一个线程?)这是你应该努力的地方......只是IMO :)

希望这可以帮助

于 2012-06-28T07:40:48.933 回答