列挙子の実装を反復子のインタフェイスで扱う #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()をサポートせず例外を投げる。