では、どうやって実現すればいいか考えてみます。主な操作自体はArrayListにすでに実装されているので、現在例外となっている範囲を超えた値に対する振る舞いだけ追加するのが簡単そうです。ってことで、真っ先に浮かぶのがArrayListを継承。が、せっかくCollectionフレームワークが、仕様(List)と実装(ArrayList)を分離しているのに、ここでArrayListの実装に固執するのはもったいない気がします。
その辺りを踏まえて、委譲で実装してみることにします。Listインタフェースを持つオブジェクトを内部に持つ、Listインタフェースを持ったクラスを作ります。任意のListを包むラッパーのイメージです。その中で、範囲外の値が来た場合だけ処理を横取りします。
ここまでの概要は以下。
class PerlLikeList<T> implements List{ List innerList<T> = null; void add(T obj){ return innerList.add(obj); } T get(int i){ return innerList.get(i); } ... (以下、Listインタフェースのメソッドを実装) }
では、やりますか・・・と思ったら、ちょっと待ったー! Listインタフェース、なんとメソッドが25個もあります。仕事ならともかく、お遊び実装でこれはイタダケナイ。
・・・そんなわけで、今日は実装をやめときます(ぉ。
(やる気がないので明日へ続く)