Class 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 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:
    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
      • Methods inherited from interface java.util.Collection

        equals, hashCode, parallelStream, spliterator, stream, toArray
      • Methods inherited from interface java.lang.Iterable

        forEach
    • 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
      • add

        public boolean add​(E object)
        Specified by:
        add in interface java.util.Collection<E>
      • addAll

        public boolean addAll​(java.util.Collection<? extends E> coll)
        Specified by:
        addAll in interface java.util.Collection<E>
      • clear

        public void clear()
        Specified by:
        clear in interface java.util.Collection<E>
      • contains

        public boolean contains​(java.lang.Object object)
        Specified by:
        contains in interface java.util.Collection<E>
      • isEmpty

        public boolean isEmpty()
        Specified by:
        isEmpty in interface java.util.Collection<E>
      • iterator

        public java.util.Iterator<E> iterator()
        Specified by:
        iterator in interface java.util.Collection<E>
        Specified by:
        iterator in interface java.lang.Iterable<E>
      • remove

        public boolean remove​(java.lang.Object object)
        Specified by:
        remove in interface java.util.Collection<E>
      • size

        public int size()
        Specified by:
        size in interface java.util.Collection<E>
      • toArray

        public java.lang.Object[] toArray()
        Specified by:
        toArray in interface java.util.Collection<E>
      • toArray

        public <T> T[] toArray​(T[] object)
        Specified by:
        toArray in interface java.util.Collection<E>
      • containsAll

        public boolean containsAll​(java.util.Collection<?> coll)
        Specified by:
        containsAll in interface java.util.Collection<E>
      • removeIf

        public boolean removeIf​(java.util.function.Predicate<? super E> filter)
        Specified by:
        removeIf in interface java.util.Collection<E>
        Since:
        4.4
      • removeAll

        public boolean removeAll​(java.util.Collection<?> coll)
        Specified by:
        removeAll in interface java.util.Collection<E>
      • retainAll

        public boolean retainAll​(java.util.Collection<?> coll)
        Specified by:
        retainAll in interface java.util.Collection<E>
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object