Java

総称型に対応したLazyListクラスを作った

kght6123

kght6123

総称型に対応したLazyListクラスを作った

解説

JavaのListでインデックスの範囲外にaddしたり、setしてもエラー(IndexOutOfBoundsException)にならないListクラスを作りました。

apacheのcommons-collectionsの1.0系に含まれる、LazyListを総称型に対応したようなイメージです。

(今、最新のcommons-collectionsの4.0系で総称型に対応しているので、このコードは不要です。)

ソースコード

// 自作のLazyList(ジェネリクス対応版)
public interface Factory<T> extends Serializable
{
	public T create();
}

import java.util.ArrayList;
import java.util.Collection;

public class LazyList<T> extends ArrayList<T>
{
	private static final long serialVersionUID = 1L;
	
	private final Factory<T> factory;
	
	public LazyList(Collection<T> o, Factory<T> factory)
	{
		super(o);
		this.factory = factory;
	}
	
	@Override
	public T get(int index)
	{
		while(super.size() <= index)
		{
			super.add(factory.create());
		}
		return super.get(index);
	}
	
	@Override
	public T set(int index, T element)
	{
		while(super.size() <= index)
		{
			super.add(factory.create());
		}
		return super.set(index, element);
	}
}