列挙子の実装を反復子のインタフェイスで扱う #1
ついでなので逆にEnumerationからIteratorを得る方向も書いてみる。
import java.util.Enumeration; import java.util.Iterator; import java.util.NoSuchElementException; ...snip public static <E> Iterator<E> iterator(final Enumeration<E> enumeration) { return new Iterator<E>() { public boolean hasNext() { return enumeration.hasMoreElements(); } public E next() { return enumeration.nextElement(); } public void remove() { throw new UnsupportedOperationException(); } }; } public static <E> Iterator<E> iterator(final E[] array) { return new Iterator<E>() { private int index = 0; public boolean hasNext() { return index < array.length; } public E next() { if (! hasNext()) throw new NoSuchElementException(); return array[index++]; } public void remove() { throw new UnsupportedOperationException(); } }; } ...snip
IteratorからEnumerationを得る場合に合わせてEnumerationまたは配列を引数に取りIteratorを返すクラスメソッドiteratorを定義した。
ただ、Iteratorを返すメソッドを持つことを示すIterableインタフェイスに相当するものがEnumerationにはないので、
enumeration(Iterable)に相当するものはない。
Enumerationは要素を列挙する機能を持つだけなので、これらのメソッドが返すIteratorはremove()をサポートせず例外を投げる。