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

最も可能性の高い説明は、同じコレクションaddressesを参照していることです。shippingAddressesこれはデバッガで確認できます。

getAllAddresses() は shippingAddresses を使用しますか?

このコレクションは別のスレッドで変更されていませんか? これは常に発生しますか、それともたまにしか発生しませんか?

于 2012-06-28T07:05:47.487 に答える
0

なぜ皆さんが shippingAddresses を検討するのか、私にはよくわかりません。Vanathi は、

リスト アドレス = getAllAddress();

for-each ループで。

したがって、「アドレス」によって参照される配列を変更するスレッドが必要です。ところで、例外は最初の反復中に発生しますか、または

「getAllAddresses」の実装は次のとおりです。

public List getAllAddress() { return allAddress; }

したがって、「allAddresses」はあるクラスの単なるデータ メンバーであると結論付けます。このクラスは明らかに同時変更を許可します(別のスレッド?)これはあなたが努力すべき場所です...ちょうどIMO :)

お役に立てれば

于 2012-06-28T07:40:48.933 に答える