- 締切済み
IteratorとConcurrentModificationException
IteratorにConcurrentModificationExceptionをthrowさせるやり方がわかりません。 配列に数字を挿入、削除するクラスをつくりました。 MyArrayにあるメソッド、変数 int [] array int mod // 挿入、削除の合計回数 初期値は0 add(int n) // nをarrayに挿入します delete() // 一番うしろの数字を削除します getMod() // modを返します iterator() // new ArrayIterator (array.length, mod) を返します。 modはadd()とdelete()が呼ばれるたびに1ずつ増えていくようにしています。ArrayIteratorはIteratorをimplementsしたクラスです。 <メインメソッドのコード> MyArray a = new MyArray (10); // サイズが10の配列をつくります a.add(1); a.add(2); a.add(3); a.add(4); Iterator it = a.iterator(); it.next(); // 配列の一番最初の数字を返します。 (i.e. 1) a.add(5); // 5を配列に挿入します。 // Iterator以外のメソッドで配列を変えてしまったので、 // ConcurrentModificationExceptionをthrowさせたいんです。 it.next(); // ここでConcurrentModificationExceptionをthrowしてくれません add()、 delete()、 getMod()はそのままにして全く変えずに、これができる方法ありますか?(その三つのメソッド以外は書きかえれます)it.next()だけでなく、it.hasNext()、it.remove()でも同じようにConcurrentModificationExceptionがthrowされるようにしたいのですが・・・。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Bonjin
- ベストアンサー率43% (418/971)
ArrayIteratorとMyArrayの関係(内部クラスなのか否か)を補足して下さい。 >iterator() // new ArrayIterator (array.length, mod) を返します。 ここだけ見ると非内部クラスのように見えますが、ArrayIteratorのコンストラクタに与える引数がこれだけではIterator自体が実装出来るとは思えません。