/* * Copyright 2013-2015 EMC Corporation. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.emc.ecs.sync.util; import java.util.Iterator; import java.util.NoSuchElementException; public abstract class ReadOnlyIterator<T> implements Iterator<T> { private T next; /** * Implement in subclasses to return the next object or null if there are no more objects. */ protected abstract T getNextObject(); @Override public final synchronized boolean hasNext() { if (next != null) return true; next = getNextObject(); return next != null; } @Override public final synchronized T next() { if (hasNext()) { T theNext = next; next = null; return theNext; } else throw new NoSuchElementException("No more objects"); } @Override public final void remove() { throw new UnsupportedOperationException("This is a read-only iterator"); } }