LazyListを使うともっと楽だった

以前に紹介した、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メソッドが使用された際に、自動拡張されるようになります。
サンプルプログラムも作り直してみました。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください