ArrayType (Jackson JSON Processor)
Date: 2013-07-14

org.codehaus.jackson.map.type

## Class ArrayType

- java.lang.Object
- - org.codehaus.jackson.type.JavaType
  - - org.codehaus.jackson.map.type.TypeBase
    - - org.codehaus.jackson.map.type.ArrayType

- All Implemented Interfaces:
    JsonSerializable, JsonSerializableWithType

      public final class ArrayType
      extends TypeBase

  Array types represent Java arrays, both primitive and object valued. Further, Object-valued arrays can have element type of any other legal `JavaType`.

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected JavaType` | `_componentType` Type of elements in the array.
    `protected Object` | `_emptyArray` We will also keep track of shareable instance of empty array, since it usually needs to be constructed any way; and because it is essentially immutable and thus can be shared.

    - ### Fields inherited from class org.codehaus.jackson.type.JavaType

      `_class, _hashCode, _typeHandler, _valueHandler`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected JavaType` | `_narrow(Class<?> subclass)` Handling of narrowing conversions for arrays is trickier: for now, it is not even allowed.
    `protected String` | `buildCanonicalName()`
    `static ArrayType` | `construct(JavaType componentType)` Deprecated. Since 1.9, if you must directly instantiate, call method that takes handlers
    `static ArrayType` | `construct(JavaType componentType, Object valueHandler, Object typeHandler)`
    `JavaType` | `containedType(int index)` Method for accessing definitions of contained ("child") types.
    `int` | `containedTypeCount()` Method for checking how many contained types this type has.
    `String` | `containedTypeName(int index)` Not sure what symbolic name is used internally, if any; let's follow naming of Collection types here.
    `boolean` | `equals(Object o)`
    `JavaType` | `getContentType()` Method for accessing content type of this type, if type has such a thing: simple types do not, structured types do (like arrays, Collections and Maps)
    `StringBuilder` | `getErasedSignature(StringBuilder sb)` Method for accessing signature without generic type information, in form compatible with all versions of JVM, and specifically used for type descriptions when generating byte code.
    `StringBuilder` | `getGenericSignature(StringBuilder sb)`
    `boolean` | `hasGenericTypes()` Method that can be used to find out if the type directly declares generic parameters (for its direct super-class and/or super-interfaces).
    `boolean` | `isAbstract()` For some odd reason, modifiers for array classes would claim they are abstract types.
    `boolean` | `isArrayType()`
    `boolean` | `isConcrete()` For some odd reason, modifiers for array classes would claim they are abstract types.
    `boolean` | `isContainerType()`
    `JavaType` | `narrowContentsBy(Class<?> contentClass)` For array types, both main type and content type can be modified; but ultimately they are interchangeable.
    `String` | `toString()`
    `JavaType` | `widenContentsBy(Class<?> contentClass)`
    `ArrayType` | `withContentTypeHandler(Object h)` "Copy method" that will construct a new instance that is identical to this instance, except that its content type will have specified type handler assigned.
    `ArrayType` | `withContentValueHandler(Object h)`
    `ArrayType` | `withTypeHandler(Object h)` "Copy method" that will construct a new instance that is identical to this instance, except that it will have specified type handler assigned.
    `ArrayType` | `withValueHandler(Object h)`

    - ### Methods inherited from class org.codehaus.jackson.map.type.TypeBase

      `_classSignature, getTypeHandler, getValueHandler, serialize, serializeWithType, toCanonical`

    - ### Methods inherited from class org.codehaus.jackson.type.JavaType

      `_assertSubclass, _widen, forcedNarrowBy, getErasedSignature, getGenericSignature, getKeyType, getRawClass, hashCode, hasRawClass, isCollectionLikeType, isEnumType, isFinal, isInterface, isMapLikeType, isPrimitive, isThrowable, narrowBy, setValueHandler, widenBy`

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### _componentType

          protected final JavaType _componentType

      Type of elements in the array.

    - #### _emptyArray

          protected final Object _emptyArray

      We will also keep track of shareable instance of empty array, since it usually needs to be constructed any way; and because it is essentially immutable and thus can be shared.

  - ### Method Detail

    - #### construct

          @Deprecated
          public static ArrayType construct(JavaType componentType)

      Deprecated. Since 1.9, if you must directly instantiate, call method that takes handlers

    - #### construct

          public static ArrayType construct(JavaType componentType,
                            Object valueHandler,
                            Object typeHandler)

    - #### withTypeHandler

          public ArrayType withTypeHandler(Object h)

      Description copied from class: `JavaType`
      "Copy method" that will construct a new instance that is identical to this instance, except that it will have specified type handler assigned.
      Specified by:
        `withTypeHandler` in class `JavaType`
      Returns:
        Newly created type instance

    - #### withContentTypeHandler

          public ArrayType withContentTypeHandler(Object h)

      Description copied from class: `JavaType`
      "Copy method" that will construct a new instance that is identical to this instance, except that its content type will have specified type handler assigned.
      Specified by:
        `withContentTypeHandler` in class `JavaType`
      Returns:
        Newly created type instance

    - #### withValueHandler

          public ArrayType withValueHandler(Object h)

      Overrides:
        `withValueHandler` in class `JavaType`

    - #### withContentValueHandler

          public ArrayType withContentValueHandler(Object h)

      Overrides:
        `withContentValueHandler` in class `JavaType`

    - #### buildCanonicalName

          protected String buildCanonicalName()

      Specified by:
        `buildCanonicalName` in class `TypeBase`

    - #### _narrow

          protected JavaType _narrow(Class<?> subclass)

      Handling of narrowing conversions for arrays is trickier: for now, it is not even allowed.
      Specified by:
        `_narrow` in class `JavaType`

    - #### narrowContentsBy

          public JavaType narrowContentsBy(Class<?> contentClass)

      For array types, both main type and content type can be modified; but ultimately they are interchangeable.
      Specified by:
        `narrowContentsBy` in class `JavaType`

    - #### widenContentsBy

          public JavaType widenContentsBy(Class<?> contentClass)

      Specified by:
        `widenContentsBy` in class `JavaType`

    - #### isArrayType

          public boolean isArrayType()

      Overrides:
        `isArrayType` in class `JavaType`

    - #### isAbstract

          public boolean isAbstract()

      For some odd reason, modifiers for array classes would claim they are abstract types. Not so, at least for our purposes.
      Overrides:
        `isAbstract` in class `JavaType`

    - #### isConcrete

          public boolean isConcrete()

      For some odd reason, modifiers for array classes would claim they are abstract types. Not so, at least for our purposes.
      Overrides:
        `isConcrete` in class `JavaType`

    - #### hasGenericTypes

          public boolean hasGenericTypes()

      Description copied from class: `JavaType`
      Method that can be used to find out if the type directly declares generic parameters (for its direct super-class and/or super-interfaces).
      Overrides:
        `hasGenericTypes` in class `JavaType`

    - #### containedTypeName

          public String containedTypeName(int index)

      Not sure what symbolic name is used internally, if any; let's follow naming of Collection types here. Should not really matter since array types have no super types.
      Overrides:
        `containedTypeName` in class `JavaType`
      Parameters:
        `index` - Index of contained type to return
      Returns:
        Contained type at index, or null if no such type exists (no exception thrown)

    - #### isContainerType

          public boolean isContainerType()

      Specified by:
        `isContainerType` in class `JavaType`
      Returns:
        True if type represented is a container type; this includes array, Map and Collection types.

    - #### getContentType

          public JavaType getContentType()

      Description copied from class: `JavaType`
      Method for accessing content type of this type, if type has such a thing: simple types do not, structured types do (like arrays, Collections and Maps)
      Overrides:
        `getContentType` in class `JavaType`

    - #### containedTypeCount

          public int containedTypeCount()

      Description copied from class: `JavaType`
      Method for checking how many contained types this type has. Contained types are usually generic types, so that generic Maps have 2 contained types.
      Overrides:
        `containedTypeCount` in class `JavaType`

    - #### containedType

          public JavaType containedType(int index)

      Description copied from class: `JavaType`
      Method for accessing definitions of contained ("child") types.
      Overrides:
        `containedType` in class `JavaType`
      Parameters:
        `index` - Index of contained type to return
      Returns:
        Contained type at index, or null if no such type exists (no exception thrown)

    - #### getGenericSignature

          public StringBuilder getGenericSignature(StringBuilder sb)

      Specified by:
        `getGenericSignature` in class `TypeBase`
      Parameters:
        `sb` - StringBuilder to append signature to
      Returns:
        StringBuilder that was passed in; returned to allow call chaining

    - #### getErasedSignature

          public StringBuilder getErasedSignature(StringBuilder sb)

      Description copied from class: `JavaType`
      Method for accessing signature without generic type information, in form compatible with all versions of JVM, and specifically used for type descriptions when generating byte code.
      Specified by:
        `getErasedSignature` in class `TypeBase`
      Parameters:
        `sb` - StringBuilder to append signature to
      Returns:
        StringBuilder that was passed in; returned to allow call chaining

    - #### toString

          public String toString()

      Specified by:
        `toString` in class `JavaType`

    - #### equals

          public boolean equals(Object o)

      Specified by:
        `equals` in class `JavaType`