EclipseLink 2.5.0, build 'v20130507-3faac2b' API Reference

org.eclipse.persistence.jpa.jpql.tools.utility.iterator
Class CloneIterator<E>

java.lang.Object
  extended by org.eclipse.persistence.jpa.jpql.tools.utility.iterator.CloneIterator<E>
Type Parameters:
E - the type of elements returned by the iterator
All Implemented Interfaces:
java.util.Iterator<E>
Direct Known Subclasses:
SnapshotCloneIterable.LocalCloneIterator

public class CloneIterator<E>
extends java.lang.Object
implements java.util.Iterator<E>

A CloneIterator iterates over a copy of a collection, allowing for concurrent access to the original collection.

The original collection passed to the CloneIterator's constructor should be synchronized (e.g. Vector); otherwise you run the risk of a corrupted collection.

By default, a CloneIterator does not support the remove() operation; this is because it does not have access to the original collection. But if the CloneIterator is supplied with an CloneIterator.Remover it will delegate the remove() operation to the CloneIterator.Remover. Alternatively, a subclass can override the remove(Object) method.

See Also:
org.eclipse.jpt.common.utility.internal.iterables.LiveCloneIterable, org.eclipse.jpt.common.utility.internal.iterables.SnapshotCloneIterable

Nested Class Summary
static interface CloneIterator.Remover<T>
          Used by CloneIterator to remove elements from the original collection; since the iterator does not have direct access to the original collection.
 
Constructor Summary
protected CloneIterator(CloneIterator.Remover<E> remover, java.lang.Object... array)
          Internal constructor used by subclasses.
  CloneIterator(java.util.Collection<? extends E> collection)
          Construct an iterator on a copy of the specified collection.
  CloneIterator(java.util.Collection<? extends E> collection, CloneIterator.Remover<E> remover)
          Construct an iterator on a copy of the specified collection.
  CloneIterator(E[] array)
          Construct an iterator on a copy of the specified array.
  CloneIterator(E[] array, CloneIterator.Remover<E> remover)
          Construct an iterator on a copy of the specified array.
 
Method Summary
 boolean hasNext()
           
protected  E nestedNext()
          The collection passed in during construction held elements of type E, so this cast is not a problem.
 E next()
           
 void remove()
           
protected  void remove(E e)
          Remove the specified element from the original collection.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CloneIterator

public CloneIterator(java.util.Collection<? extends E> collection)
Construct an iterator on a copy of the specified collection. The remove() method will not be supported, unless a subclass overrides the remove(Object).


CloneIterator

public CloneIterator(E[] array)
Construct an iterator on a copy of the specified array. The remove() method will not be supported, unless a subclass overrides the remove(Object).


CloneIterator

public CloneIterator(java.util.Collection<? extends E> collection,
                     CloneIterator.Remover<E> remover)
Construct an iterator on a copy of the specified collection. Use the specified remover to remove objects from the original collection.


CloneIterator

public CloneIterator(E[] array,
                     CloneIterator.Remover<E> remover)
Construct an iterator on a copy of the specified array. Use the specified remover to remove objects from the original array.


CloneIterator

protected CloneIterator(CloneIterator.Remover<E> remover,
                        java.lang.Object... array)
Internal constructor used by subclasses. Swap order of arguments to prevent collision with other constructor. The passed in array will *not* be cloned.

Method Detail

hasNext

public boolean hasNext()
Specified by:
hasNext in interface java.util.Iterator<E>

next

public E next()
Specified by:
next in interface java.util.Iterator<E>

remove

public void remove()
Specified by:
remove in interface java.util.Iterator<E>

nestedNext

protected E nestedNext()
The collection passed in during construction held elements of type E, so this cast is not a problem. We need this cast because all the elements of the original collection were copied into an object array (Object[]).


remove

protected void remove(E e)
Remove the specified element from the original collection.

This method can be overridden by a subclass as an alternative to building a CloneIterator.Remover.


EclipseLink 2.5.0, build 'v20130507-3faac2b' API Reference