wildcatsの日記

赤羽在住でIT関係の会社の社長やってます。

とかいいつつ、くだらない話を書いてみる。

配列をfor文でループカウンタの参照をしながら
トラバースするコードは個人的にあまり好きではない。
まぁこんなミスは一般的にはしないと思うけど
配列のindexに負の値や配列要素数を超えた値を渡すことで
実行時エラーが発生するからだ。
昔の現場で同じ主義者がいた(?)んですが
配列をわざわざLinkedListのコンストラクタに渡した後に
イテレータを生成してトラバースしている人がいた。
それはいかんだろって思って書いたのがこんな感じのコード。


package com.wikihouse.wildcats0201;

import java.util.Iterator;

/**
* @author wildcats
*/
public class ArrayImpl implements Array {

private final Object[] objects;

/**
* @deprecated
*/
private ArrayImpl() {
this.objects = null;
}

/**
* @param objects
* @pre objects != null
*/
public ArrayImpl(Object[] objects) {
this.objects = (Object[]) Util.deepCopy(objects);
}

/**
* @see com.wikiroom.wildcats.Array#iterator()
*/
public Iterator iterator() {
return new ArrayIterator();
}

private class ArrayIterator implements Iterator {

private int cursor;

/**
* @see java.util.Iterator#remove()
*/
public void remove() {
throw new UnsupportedOperationException();
}

/**
* @see java.util.Iterator#hasNext()
*/
public boolean hasNext() {
return objects.length > cursor;
}

/**
* @see java.util.Iterator#next()
*/
public Object next() {
Object object = objects[cursor];
cursor++;
return object;
}
}

同じ理由からJExcelAPIでcellやrowのindexを渡す実装は個人的にとても気に入らないわけです(^^;;;;
で。。。それに対応してみたんですが公開する価値があるかどうか(汗)