EnumerationIteratorAdapter.java

package com.designpatterns.structural.adapter.classic;

import java.util.Enumeration;
import java.util.Iterator;
import java.util.NoSuchElementException;

/**
 * Adapts the pre-Java-2 {@link Enumeration} contract to the modern {@link Iterator}
 * contract, so legacy APIs that only expose an Enumeration can be used anywhere an
 * Iterator is expected (for-each, streams, etc.) without touching the legacy code.
 */
public final class EnumerationIteratorAdapter<T> implements Iterator<T> {

    private final Enumeration<T> adaptee;

    public EnumerationIteratorAdapter(Enumeration<T> adaptee) {
        this.adaptee = adaptee;
    }

    @Override
    public boolean hasNext() {
        return adaptee.hasMoreElements();
    }

    @Override
    public T next() {
        if (!hasNext()) {
            throw new NoSuchElementException();
        }
        return adaptee.nextElement();
    }
}