ネットワーク サービスから返される定義済みオブジェクトのリストがあります (ネットワーク サービスはこのリストを更新します)。ある時点で、これですでに持っていたものをリストビューにレンダリングしたいと思います。私は次のコードを持っています:
List<MyObject> myObjects = MyService.getInstance().getListOfMyObject()
また、myObjects リストを更新する別のスレッドがあるため、同時実行変更の例外を回避したいと考えています。私は持っている:
List<MyObject> clonedList = null;
synchronized(myObjects){
clonedList = MyListUtils.cloneList(myObjects)
}
MyListUtils の cloneList() 関数は、簡単な方法で実装されます。
public static <T extends ICloneable<T>> List<T> cloneList(final List<T> source){
List<T> result = new ArrayList<T>();
for(T t : source){
T newObject = t.clone();
result.add(newObject);
}
return result;
}
-ICloneable インターフェイスは気にしないでください。この ICloneable を使用してマークを付けます。
そして、私はこの例外を与えられました
03-11 16:07:11.370: E/AndroidRuntime(8076): FATAL EXCEPTION: main
03-11 16:07:11.370: E/AndroidRuntime(8076): java.util.ConcurrentModificationException
03-11 16:07:11.370: E/AndroidRuntime(8076): at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:569)
03-11 16:07:11.370: E/AndroidRuntime(8076): at xxx.utilities.MyListUtils.cloneList(CollectionUtils.java:120)
私はそれの何が問題なのかわかりませんか?オブジェクトを変更する関数は呼び出しませんでした。オブジェクトの 1 ビットも変更されないことがわかっている限り、オブジェクトを「複製」するだけです。どんなアイデアでも大歓迎です、ありがとう。