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


コメントを残す

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

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