Class CloneIterator<E>
- java.lang.Object
-
- 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>
ACloneIterator
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 theremove()
operation; this is because it does not have access to the original collection. But if theCloneIterator
is supplied with anCloneIterator.Remover
it will delegate theremove()
operation to theCloneIterator.Remover
. Alternatively, a subclass can override theremove(Object)
method.- See Also:
- LiveCloneIterable, SnapshotCloneIterable
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
CloneIterator.Remover<T>
Used byCloneIterator
to remove elements from the original collection; since the iterator does not have direct access to the original collection.
-
Constructor Summary
Constructors Modifier Constructor Description 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.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.protected
CloneIterator(CloneIterator.Remover<E> remover, java.lang.Object... array)
Internal constructor used by subclasses.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
hasNext()
protected E
nestedNext()
The collection passed in during construction held elements of typeE
, so this cast is not a problem.E
next()
void
remove()
protected void
remove(E e)
Remove the specified element from the original collection.
-
-
-
Constructor Detail
-
CloneIterator
public CloneIterator(java.util.Collection<? extends E> collection)
Construct an iterator on a copy of the specified collection. Theremove()
method will not be supported, unless a subclass overrides theremove(Object)
.
-
CloneIterator
public CloneIterator(E[] array)
Construct an iterator on a copy of the specified array. Theremove()
method will not be supported, unless a subclass overrides theremove(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 interfacejava.util.Iterator<E>
-
remove
public void remove()
- Specified by:
remove
in interfacejava.util.Iterator<E>
-
nestedNext
protected E nestedNext()
The collection passed in during construction held elements of typeE
, 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
.
-
-