反復子の実装を列挙子のインタフェイスで扱う #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