反復子の実装を列挙子のインタフェイスで扱う #1

列挙子Enumerationは古くからあったため反復子Iteratorが登場してからもEnumerationを要求するものはなくなったわけではない。
Iteratorの実装が与えられていた場合に、それをEnumerationとしてアクセスすることを考える。
これは単純にIteratorの実装に委譲するEnumerationを書けば済むだろう。

import java.util.Arrays;
import java.util.Enumeration;
import java.util.Iterator;
...snip
        for (
            Enumeration<String> e = new Enumeration<String>() {
                private Iterator<String> iterator = Arrays.asList("Alice", "Bob", "Carol").iterator();
                public boolean hasMoreElements() {
                    return iterator.hasNext();
                }
                public String nextElement() {
                    return iterator.next();
                }
            };
            e.hasMoreElements();
        ) {
            System.out.println(e.nextElement());
        }
...snip

ところが、Collectionを引数にとってその内容を列挙するEnumerationを返すCollections.enumeration()があったのだった。

import java.util.Arrays;
import java.util.Collections;
import java.util.Enumeration;
...snip
        for (
            Enumeration<String> e = Collections.enumeration(Arrays.asList("Alice", "Bob", "Carol"));
            e.hasMoreElements();
        ) {
            System.out.println(e.nextElement());
        }
...snip