大学の研究の関係で、いろいろなことを順番に処理させたいってことがあります。そんなときに、こんなコードを書くとえらい目に遭います。
public static void main(String[] args){
List<Executable> list = getTasks();
for(Executable e:list){
e.execute();
}
}
これは、ただ単にリストの中身を実行してるだけなんですが、もしこのExecutableクラス中で大きなデータを保持したまま終了するようなソースを書いていた場合、いくらメモリがあっても足りません。そんなわけで、実行したあとのいらないインスタンスはさっさと切り離した方がベターです。
public static void main(String[] args){
List<Executable> list = getTasks();
for(Iterator<Executable> it = list.iterator();it.hasNext();){
e.execute();
it.remove();
}
}
Enumerationインターフェースが推奨されない理由はここにあるのかもしれませんね。Collectionインターフェースを実装してるクラスでは、iteration中の要素の削除は例外のもとだし。
コメントする