Class ArrayDataObject<T>

  • All Implemented Interfaces:
    DataObject, Serializable, Iterable<T>, Collection<T>, List<T>
    Direct Known Subclasses:
    ArrayOfDataObject

    public class ArrayDataObject<T>
    extends AbstractList<T>
    implements DataObject
    An ArrayDataObject is a DataObject whose content is an array. It is useful where you need a DataObject as the representation for an ASN.1 SEQUENCE OF or SET OF type, and is used if the extendible adaptation is given.

    This implementation assumes that the contained datatype is an opaque type with no special properties. For arrays of datatypes that implement DataObject, ArrayOfDataObject should be used.

    See Also:
    Serialized Form
    • Field Detail

      • value

        protected final T[] value
    • Constructor Detail

      • ArrayDataObject

        public ArrayDataObject​(T[] value)
        Constructs from a given initial array value.
        Parameters:
        value - array value; must not be null.
    • Method Detail

      • getValue

        public T[] getValue()
        Gets the array value from this DataObject. If this instance is readonly, a copy of the array is returned, to avoid possible mutation of the array contents.
        Returns:
        array
      • get

        public T get​(int index)
        Gets the element at the given position in the list.
        Specified by:
        get in interface List<T>
        Specified by:
        get in class AbstractList<T>
        Parameters:
        index - position in list
        Returns:
        element from list
      • set

        public T set​(int index,
                     T element)
        Sets the element at the given position in the list to the given value.
        Specified by:
        set in interface List<T>
        Overrides:
        set in class AbstractList<T>
        Parameters:
        index - position in list
        element - new value
        Returns:
        old value from same position in list
      • clone

        public ArrayDataObject<T> clone()
        Description copied from interface: DataObject
        Perform a deep copy of this object. Read-only state of the object is not copied; the new object will be read-write by default.

        Inherently immutable objects may optionally return the same object without modification from clone(), rather than constructing a new instance.

        Specified by:
        clone in interface DataObject
        Overrides:
        clone in class Object
        Returns:
        a new object that is a deep copy of this object; for immutable objects, the same object may optionally be returned.
      • setReadOnly

        public void setReadOnly()
        Description copied from interface: DataObject
        Set this object to be "read-only". Any subsequent attempt to modify this object will throw IllegalStateException. Once an object has been made read-only, it cannot be later set to read-write - this is a "one-way" operation.

        Note that a read-only object is not necessarily immutable; if reference types are returned from accessors, then callers could theoretically mutate those objects even if the top-level object is marked as read-only. The ability to make objects read-only is intended to catch programming errors (e.g. attempting to modify a data object passed as part of a SLEE event), not to provide an absolute guarantee of immutability.

        Calling setReadOnly() on an object that is already read-only is a no-op.

        Some DataObject implementations may be inherently immutable. In those cases, they are considered always read-only.

        Specified by:
        setReadOnly in interface DataObject
      • isReadOnly

        public boolean isReadOnly()
        Description copied from interface: DataObject
        Check if this object has been set read-only.
        Specified by:
        isReadOnly in interface DataObject
        Returns:
        true if the object is read-only or inherently immutable
        See Also:
        DataObject.setReadOnly()
      • checkModify

        protected void checkModify()
        Checks whether this DataObject is mutable.
        Throws:
        IllegalStateException - if this DataObject is read-only
      • copyOf

        public static ArrayDataObject<?> copyOf​(ArrayDataObject<?> from)
        Creates a new ArrayDataObject, initialising its value from that of the given ArrayDataObject.
        Parameters:
        from - the object from which to copy
        Returns:
        new ArrayDataObject
      • toString

        public String toString()
        Returns a printable representation of this. The printable representations of components are separated by commas and the whole is enclosed in braces, like ASN.1 value notation.
        Overrides:
        toString in class AbstractCollection<T>
        Returns:
        String
      • equals

        public boolean equals​(Object obj)
        Compares some other object to this one for equality by value.
        Specified by:
        equals in interface Collection<T>
        Specified by:
        equals in interface List<T>
        Overrides:
        equals in class AbstractList<T>
        Parameters:
        obj - other object
        Returns:
        boolean whether values are equal