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:
Serializable, Iterable<E>, Collection<E>
Direct Known Subclasses:
AbstractDualBidiMap.View, AbstractListDecorator, AbstractSetDecorator, UnmodifiableCollection

public abstract class AbstractCollectionDecorator<E> extends Object implements Collection<E>, Serializable
Decorates another Collection to provide additional behaviour.

Each method call made on this Collection is forwarded to the decorated Collection. 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 of Collection, 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:
  • Constructor Details

    • AbstractCollectionDecorator

      protected AbstractCollectionDecorator()
      Constructor only used in deserialization, do not use otherwise.
      Since:
      3.1
    • AbstractCollectionDecorator

      protected AbstractCollectionDecorator(Collection<E> coll)
      Constructor that wraps (not copies).
      Parameters:
      coll - the collection to decorate, must not be null
      Throws:
      NullPointerException - if the collection is null
  • Method Details