org.springframework.core

## Class GenericCollectionTypeResolver

- java.lang.Object
- - org.springframework.core.GenericCollectionTypeResolver

-     public abstract class GenericCollectionTypeResolver
      extends Object

  Helper class for determining element types of collections and maps.

  Mainly intended for usage within the framework, determining the target type of values to be added to a collection or map (to be able to attempt type conversion if appropriate).

  Since:
    2.0
  Author:
    Juergen Hoeller

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `GenericCollectionTypeResolver()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `static Class<?>` | `getCollectionFieldType(Field collectionField)` Determine the generic element type of the given Collection field.
    `static Class<?>` | `getCollectionFieldType(Field collectionField, int nestingLevel)` Determine the generic element type of the given Collection field.
    `static Class<?>` | `getCollectionFieldType(Field collectionField, int nestingLevel, Map<Integer,Integer> typeIndexesPerLevel)` Determine the generic element type of the given Collection field.
    `static Class<?>` | `getCollectionParameterType(MethodParameter methodParam)` Determine the generic element type of the given Collection parameter.
    `static Class<?>` | `getCollectionReturnType(Method method)` Determine the generic element type of the given Collection return type.
    `static Class<?>` | `getCollectionReturnType(Method method, int nestingLevel)` Determine the generic element type of the given Collection return type.
    `static Class<?>` | `getCollectionType(Class<? extends Collection> collectionClass)` Determine the generic element type of the given Collection class (if it declares one through a generic superclass or generic interface).
    `static Class<?>` | `getMapKeyFieldType(Field mapField)` Determine the generic key type of the given Map field.
    `static Class<?>` | `getMapKeyFieldType(Field mapField, int nestingLevel)` Determine the generic key type of the given Map field.
    `static Class<?>` | `getMapKeyFieldType(Field mapField, int nestingLevel, Map<Integer,Integer> typeIndexesPerLevel)` Determine the generic key type of the given Map field.
    `static Class<?>` | `getMapKeyParameterType(MethodParameter methodParam)` Determine the generic key type of the given Map parameter.
    `static Class<?>` | `getMapKeyReturnType(Method method)` Determine the generic key type of the given Map return type.
    `static Class<?>` | `getMapKeyReturnType(Method method, int nestingLevel)` Determine the generic key type of the given Map return type.
    `static Class<?>` | `getMapKeyType(Class<? extends Map> mapClass)` Determine the generic key type of the given Map class (if it declares one through a generic superclass or generic interface).
    `static Class<?>` | `getMapValueFieldType(Field mapField)` Determine the generic value type of the given Map field.
    `static Class<?>` | `getMapValueFieldType(Field mapField, int nestingLevel)` Determine the generic value type of the given Map field.
    `static Class<?>` | `getMapValueFieldType(Field mapField, int nestingLevel, Map<Integer,Integer> typeIndexesPerLevel)` Determine the generic value type of the given Map field.
    `static Class<?>` | `getMapValueParameterType(MethodParameter methodParam)` Determine the generic value type of the given Map parameter.
    `static Class<?>` | `getMapValueReturnType(Method method)` Determine the generic value type of the given Map return type.
    `static Class<?>` | `getMapValueReturnType(Method method, int nestingLevel)` Determine the generic value type of the given Map return type.
    `static Class<?>` | `getMapValueType(Class<? extends Map> mapClass)` Determine the generic value type of the given Map class (if it declares one through a generic superclass or generic interface).

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

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### GenericCollectionTypeResolver

          public GenericCollectionTypeResolver()

  - ### Method Detail

    - #### getCollectionType

          public static Class<?> getCollectionType(Class<? extends Collection> collectionClass)

      Determine the generic element type of the given Collection class (if it declares one through a generic superclass or generic interface).
      Parameters:
        `collectionClass` - the collection class to introspect
      Returns:
        the generic type, or `null` if none

    - #### getMapKeyType

          public static Class<?> getMapKeyType(Class<? extends Map> mapClass)

      Determine the generic key type of the given Map class (if it declares one through a generic superclass or generic interface).
      Parameters:
        `mapClass` - the map class to introspect
      Returns:
        the generic type, or `null` if none

    - #### getMapValueType

          public static Class<?> getMapValueType(Class<? extends Map> mapClass)

      Determine the generic value type of the given Map class (if it declares one through a generic superclass or generic interface).
      Parameters:
        `mapClass` - the map class to introspect
      Returns:
        the generic type, or `null` if none

    - #### getCollectionFieldType

          public static Class<?> getCollectionFieldType(Field collectionField)

      Determine the generic element type of the given Collection field.
      Parameters:
        `collectionField` - the collection field to introspect
      Returns:
        the generic type, or `null` if none

    - #### getCollectionFieldType

          public static Class<?> getCollectionFieldType(Field collectionField,
                                        int nestingLevel)

      Determine the generic element type of the given Collection field.
      Parameters:
        `collectionField` - the collection field to introspect
        `nestingLevel` - the nesting level of the target type (typically 1; e.g. in case of a List of Lists, 1 would indicate the nested List, whereas 2 would indicate the element of the nested List)
      Returns:
        the generic type, or `null` if none

    - #### getCollectionFieldType

          public static Class<?> getCollectionFieldType(Field collectionField,
                                        int nestingLevel,
                                        Map<Integer,Integer> typeIndexesPerLevel)

      Determine the generic element type of the given Collection field.
      Parameters:
        `collectionField` - the collection field to introspect
        `nestingLevel` - the nesting level of the target type (typically 1; e.g. in case of a List of Lists, 1 would indicate the nested List, whereas 2 would indicate the element of the nested List)
        `typeIndexesPerLevel` - Map keyed by nesting level, with each value expressing the type index for traversal at that level
      Returns:
        the generic type, or `null` if none

    - #### getMapKeyFieldType

          public static Class<?> getMapKeyFieldType(Field mapField)

      Determine the generic key type of the given Map field.
      Parameters:
        `mapField` - the map field to introspect
      Returns:
        the generic type, or `null` if none

    - #### getMapKeyFieldType

          public static Class<?> getMapKeyFieldType(Field mapField,
                                    int nestingLevel)

      Determine the generic key type of the given Map field.
      Parameters:
        `mapField` - the map field to introspect
        `nestingLevel` - the nesting level of the target type (typically 1; e.g. in case of a List of Lists, 1 would indicate the nested List, whereas 2 would indicate the element of the nested List)
      Returns:
        the generic type, or `null` if none

    - #### getMapKeyFieldType

          public static Class<?> getMapKeyFieldType(Field mapField,
                                    int nestingLevel,
                                    Map<Integer,Integer> typeIndexesPerLevel)

      Determine the generic key type of the given Map field.
      Parameters:
        `mapField` - the map field to introspect
        `nestingLevel` - the nesting level of the target type (typically 1; e.g. in case of a List of Lists, 1 would indicate the nested List, whereas 2 would indicate the element of the nested List)
        `typeIndexesPerLevel` - Map keyed by nesting level, with each value expressing the type index for traversal at that level
      Returns:
        the generic type, or `null` if none

    - #### getMapValueFieldType

          public static Class<?> getMapValueFieldType(Field mapField)

      Determine the generic value type of the given Map field.
      Parameters:
        `mapField` - the map field to introspect
      Returns:
        the generic type, or `null` if none

    - #### getMapValueFieldType

          public static Class<?> getMapValueFieldType(Field mapField,
                                      int nestingLevel)

      Determine the generic value type of the given Map field.
      Parameters:
        `mapField` - the map field to introspect
        `nestingLevel` - the nesting level of the target type (typically 1; e.g. in case of a List of Lists, 1 would indicate the nested List, whereas 2 would indicate the element of the nested List)
      Returns:
        the generic type, or `null` if none

    - #### getMapValueFieldType

          public static Class<?> getMapValueFieldType(Field mapField,
                                      int nestingLevel,
                                      Map<Integer,Integer> typeIndexesPerLevel)

      Determine the generic value type of the given Map field.
      Parameters:
        `mapField` - the map field to introspect
        `nestingLevel` - the nesting level of the target type (typically 1; e.g. in case of a List of Lists, 1 would indicate the nested List, whereas 2 would indicate the element of the nested List)
        `typeIndexesPerLevel` - Map keyed by nesting level, with each value expressing the type index for traversal at that level
      Returns:
        the generic type, or `null` if none

    - #### getCollectionParameterType

          public static Class<?> getCollectionParameterType(MethodParameter methodParam)

      Determine the generic element type of the given Collection parameter.
      Parameters:
        `methodParam` - the method parameter specification
      Returns:
        the generic type, or `null` if none

    - #### getMapKeyParameterType

          public static Class<?> getMapKeyParameterType(MethodParameter methodParam)

      Determine the generic key type of the given Map parameter.
      Parameters:
        `methodParam` - the method parameter specification
      Returns:
        the generic type, or `null` if none

    - #### getMapValueParameterType

          public static Class<?> getMapValueParameterType(MethodParameter methodParam)

      Determine the generic value type of the given Map parameter.
      Parameters:
        `methodParam` - the method parameter specification
      Returns:
        the generic type, or `null` if none

    - #### getCollectionReturnType

          public static Class<?> getCollectionReturnType(Method method)

      Determine the generic element type of the given Collection return type.
      Parameters:
        `method` - the method to check the return type for
      Returns:
        the generic type, or `null` if none

    - #### getCollectionReturnType

          public static Class<?> getCollectionReturnType(Method method,
                                         int nestingLevel)

      Determine the generic element type of the given Collection return type.

      If the specified nesting level is higher than 1, the element type of a nested Collection/Map will be analyzed.

      Parameters:
        `method` - the method to check the return type for
        `nestingLevel` - the nesting level of the target type (typically 1; e.g. in case of a List of Lists, 1 would indicate the nested List, whereas 2 would indicate the element of the nested List)
      Returns:
        the generic type, or `null` if none

    - #### getMapKeyReturnType

          public static Class<?> getMapKeyReturnType(Method method)

      Determine the generic key type of the given Map return type.
      Parameters:
        `method` - the method to check the return type for
      Returns:
        the generic type, or `null` if none

    - #### getMapKeyReturnType

          public static Class<?> getMapKeyReturnType(Method method,
                                     int nestingLevel)

      Determine the generic key type of the given Map return type.
      Parameters:
        `method` - the method to check the return type for
        `nestingLevel` - the nesting level of the target type (typically 1; e.g. in case of a List of Lists, 1 would indicate the nested List, whereas 2 would indicate the element of the nested List)
      Returns:
        the generic type, or `null` if none

    - #### getMapValueReturnType

          public static Class<?> getMapValueReturnType(Method method)

      Determine the generic value type of the given Map return type.
      Parameters:
        `method` - the method to check the return type for
      Returns:
        the generic type, or `null` if none

    - #### getMapValueReturnType

          public static Class<?> getMapValueReturnType(Method method,
                                       int nestingLevel)

      Determine the generic value type of the given Map return type.
      Parameters:
        `method` - the method to check the return type for
        `nestingLevel` - the nesting level of the target type (typically 1; e.g. in case of a List of Lists, 1 would indicate the nested List, whereas 2 would indicate the element of the nested List)
      Returns:
        the generic type, or `null` if none