ReadOnlyIterator.java

package eu.javaexperience.collection.iterator;

import java.util.Iterator;

import eu.javaexperience.asserts.AssertArgument;

public class ReadOnlyIterator<T> implements Iterator<T>, Iterable<T>
{
	protected final Iterator<T> it;
	
	public ReadOnlyIterator(Iterator<T> it)
	{
		AssertArgument.assertNotNull(this.it = it, "iterator");
	}
	
	
	@Override
	public boolean hasNext()
	{
		return it.hasNext();
	}

	@Override
	public T next()
	{
		return it.next();
	}

	@Override
	public void remove()
	{
		throw new RuntimeException("Iterator is read only") ;
	}

	@Override
	public Iterator<T> iterator()
	{
		return this;
	}
}