/**
 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
 */

package net.sourceforge.pmd.util;

import java.util.Iterator;

/**
 * A singleton iterator that never has anything.
 *
 * @author Brian Remedios
 *
 * @param <T>
 */
public final class EmptyIterator<T extends Object> implements Iterator<T> {

    @SuppressWarnings("rawtypes")
    public static final Iterator INSTANCE = new EmptyIterator();

    private EmptyIterator() {
    }

    @SuppressWarnings("unchecked")
    public static <T extends Object> Iterator<T> instance() {
        return INSTANCE;
    }

    @Override
    public boolean hasNext() {
        return false;
    }

    @Override
    public T next() {
        return null;
    }

    @Override
    public void remove() {
        throw new UnsupportedOperationException();
    }
}
