以前に紹介した、Listを使ったActionFormのシンプルなサンプルですが、
Commons-Collectionsにある、LazyListを使って記述すれば、もっとスッキリです。
前のサンプルでは、こんな風に
public Detail getDetail(int index){
while(detailList.size() <= index){
detailList.add(new Detail());
}
return (Detail)detailList.get(index);
}
ArrayListを使いつつ、getするときに自動拡張するような処理を自作していたわけですが、これを実装したListが、Commons-Collectionsにあります。
private List detailList = ListUtils.lazyList(new ArrayList(), new Factory() {
public Object create() {
return new Detail();
}
});
ListUtilsに、LazyListを生成するファクトリメソッドがあるので、それを使って生成します。
2つ目の引数Factoryは、自動拡張する際にaddされるオブジェクトを返します。
いちいちクラス定義する必要はなく、匿名クラスで実装してしまえば楽です。
(クロージャーのないJavaはこんな感じで処理を委譲します)
サイズを超えたgetメソッドが使用された際に、自動拡張されるようになります。
サンプルプログラムも作り直してみました。