About

本サイトについて

趣味で開発したプログラムや開発メモを載せています。
ソースコードはGithubで公開しつつ、なるべく後から分かるように解説に努めてますので、
誰かのお役に立てれば嬉しいです。

プロフィール

kght6123

佐賀県出身で1985年生まれ。
三重県四日市市在住のシステムエンジニア。家庭を大事にしたい2児の父。

kght6123.page

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

2022-10-01T11:54:24.867Z

解説

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);
    }
}
関連タグ