Class AbstractCollectionDecorator<E>
- java.lang.Object
-
- org.apache.openjpa.lib.util.collections.AbstractCollectionDecorator<E>
-
- Type Parameters:
E
- the type of the elements in the collection
- All Implemented Interfaces:
java.io.Serializable
,java.lang.Iterable<E>
,java.util.Collection<E>
- Direct Known Subclasses:
AbstractDualBidiMap.View
,AbstractListDecorator
,AbstractSetDecorator
,UnmodifiableCollection
public abstract class AbstractCollectionDecorator<E> extends java.lang.Object implements java.util.Collection<E>, java.io.Serializable
Decorates anotherCollection
to provide additional behaviour.Each method call made on this
Collection
is forwarded to the decoratedCollection
. This class is used as a framework on which to build to extensions such as synchronized and unmodifiable behaviour. The main advantage of decoration is that one decorator can wrap any implementation ofCollection
, whereas sub-classing requires a new class to be written for each implementation.This implementation does not perform any special processing with
iterator()
. Instead it simply returns the value from the wrapped collection. This may be undesirable, for example if you are trying to write an unmodifiable implementation it might provide a loophole.This implementation does not forward the hashCode and equals methods through to the backing object, but relies on Object's implementation. This is necessary to preserve the symmetry of equals. Custom definitions of equality are usually based on an interface, such as Set or List, so that the implementation of equals can cast the object being tested for equality to the custom interface. AbstractCollectionDecorator does not implement such custom interfaces directly; they are implemented only in subclasses. Therefore, forwarding equals would break symmetry, as the forwarding object might consider itself equal to the object being tested, but the reverse could not be true. This behavior is consistent with the JDK's collection wrappers, such as
Collections.unmodifiableCollection(Collection)
. Use an interface-specific subclass of AbstractCollectionDecorator, such as AbstractListDecorator, to preserve equality behavior, or override equals directly.- Since:
- 3.0
- See Also:
- Serialized Form
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
AbstractCollectionDecorator()
Constructor only used in deserialization, do not use otherwise.protected
AbstractCollectionDecorator(java.util.Collection<E> coll)
Constructor that wraps (not copies).
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
add(E object)
boolean
addAll(java.util.Collection<? extends E> coll)
void
clear()
boolean
contains(java.lang.Object object)
boolean
containsAll(java.util.Collection<?> coll)
protected java.util.Collection<E>
decorated()
Gets the collection being decorated.boolean
isEmpty()
java.util.Iterator<E>
iterator()
boolean
remove(java.lang.Object object)
boolean
removeAll(java.util.Collection<?> coll)
boolean
removeIf(java.util.function.Predicate<? super E> filter)
boolean
retainAll(java.util.Collection<?> coll)
protected void
setCollection(java.util.Collection<E> coll)
Sets the collection being decorated.int
size()
java.lang.Object[]
toArray()
<T> T[]
toArray(T[] object)
java.lang.String
toString()
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
-
-
-
Constructor Detail
-
AbstractCollectionDecorator
protected AbstractCollectionDecorator()
Constructor only used in deserialization, do not use otherwise.- Since:
- 3.1
-
AbstractCollectionDecorator
protected AbstractCollectionDecorator(java.util.Collection<E> coll)
Constructor that wraps (not copies).- Parameters:
coll
- the collection to decorate, must not be null- Throws:
java.lang.NullPointerException
- if the collection is null
-
-
Method Detail
-
decorated
protected java.util.Collection<E> decorated()
Gets the collection being decorated. All access to the decorated collection goes via this method.- Returns:
- the decorated collection
-
setCollection
protected void setCollection(java.util.Collection<E> coll)
Sets the collection being decorated.NOTE: this method should only be used during deserialization
- Parameters:
coll
- the decorated collection
-
addAll
public boolean addAll(java.util.Collection<? extends E> coll)
- Specified by:
addAll
in interfacejava.util.Collection<E>
-
clear
public void clear()
- Specified by:
clear
in interfacejava.util.Collection<E>
-
contains
public boolean contains(java.lang.Object object)
- Specified by:
contains
in interfacejava.util.Collection<E>
-
isEmpty
public boolean isEmpty()
- Specified by:
isEmpty
in interfacejava.util.Collection<E>
-
iterator
public java.util.Iterator<E> iterator()
-
remove
public boolean remove(java.lang.Object object)
- Specified by:
remove
in interfacejava.util.Collection<E>
-
size
public int size()
- Specified by:
size
in interfacejava.util.Collection<E>
-
toArray
public java.lang.Object[] toArray()
- Specified by:
toArray
in interfacejava.util.Collection<E>
-
toArray
public <T> T[] toArray(T[] object)
- Specified by:
toArray
in interfacejava.util.Collection<E>
-
containsAll
public boolean containsAll(java.util.Collection<?> coll)
- Specified by:
containsAll
in interfacejava.util.Collection<E>
-
removeIf
public boolean removeIf(java.util.function.Predicate<? super E> filter)
- Specified by:
removeIf
in interfacejava.util.Collection<E>
- Since:
- 4.4
-
removeAll
public boolean removeAll(java.util.Collection<?> coll)
- Specified by:
removeAll
in interfacejava.util.Collection<E>
-
retainAll
public boolean retainAll(java.util.Collection<?> coll)
- Specified by:
retainAll
in interfacejava.util.Collection<E>
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
-