org.springframework.core

## Class MethodParameter

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

    public class MethodParameter
    extends Object

Helper class that encapsulates the specification of a method parameter, i.e. a Method or Constructor plus a parameter index and a nested type index for a declared generic type. Useful as a specification object to pass along.

Since:
  2.0
Author:
  Juergen Hoeller, Rob Harrop, Andy Clement
See Also:
  `GenericCollectionTypeResolver`

### Constructor Summary

Constructors
Constructor and Description
`MethodParameter(Constructor constructor, int parameterIndex)` Create a new MethodParameter for the given constructor, with nesting level 1.
`MethodParameter(Constructor constructor, int parameterIndex, int nestingLevel)` Create a new MethodParameter for the given constructor.
`MethodParameter(Method method, int parameterIndex)` Create a new MethodParameter for the given method, with nesting level 1.
`MethodParameter(Method method, int parameterIndex, int nestingLevel)` Create a new MethodParameter for the given method.
`MethodParameter(MethodParameter original)` Copy constructor, resulting in an independent MethodParameter object based on the same metadata and cache state that the original object was in.

### Method Summary

Methods
`void` `decreaseNestingLevel()` Decrease this parameter's nesting level.
`boolean` `equals(Object obj)`
`static MethodParameter` `forMethodOrConstructor(Object methodOrConstructor, int parameterIndex)` Create a new MethodParameter for the given method or constructor.
`Constructor` `getConstructor()` Return the wrapped Constructor, if any.
`Class` `getDeclaringClass()` Return the class that declares the underlying Method or Constructor.
`Type` `getGenericParameterType()` Return the generic type of the method/constructor parameter.
`Method` `getMethod()` Return the wrapped Method, if any.
`<T extends Annotation> T` `getMethodAnnotation(Class<T> annotationType)` Return the method/constructor annotation of the given type, if available.
`Annotation[]` `getMethodAnnotations()` Return the annotations associated with the target method/constructor itself.
`Class<?>` `getNestedParameterType()`
`int` `getNestingLevel()` Return the nesting level of the target type (typically 1; e.g.
`<T extends Annotation> T` `getParameterAnnotation(Class<T> annotationType)` Return the parameter annotation of the given type, if available.
`Annotation[]` `getParameterAnnotations()` Return the annotations associated with the specific method/constructor parameter.
`int` `getParameterIndex()` Return the index of the method/constructor parameter.
`String` `getParameterName()` Return the name of the method/constructor parameter.
`Class<?>` `getParameterType()` Return the type of the method/constructor parameter.
`Integer` `getTypeIndexForCurrentLevel()` Return the type index for the current nesting level.
`Integer` `getTypeIndexForLevel(int nestingLevel)` Return the type index for the specified nesting level.
`int` `hashCode()`
`<T extends Annotation> boolean` `hasParameterAnnotation(Class<T> annotationType)` Return true if the parameter has the given annotation type, and false if it doesn't.
`boolean` `hasParameterAnnotations()` Return true if the parameter has at least one annotation, false if it has none.
`void` `increaseNestingLevel()` Increase this parameter's nesting level.
`void` `initParameterNameDiscovery(ParameterNameDiscoverer parameterNameDiscoverer)` Initialize parameter name discovery for this method parameter.
`void` `setTypeIndexForCurrentLevel(int typeIndex)` Set the type index for the current nesting level.

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

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

### Constructor Detail

#### MethodParameter

    public MethodParameter(Method method,
                   int parameterIndex)

Create a new MethodParameter for the given method, with nesting level 1.

Parameters:
  `method` - the Method to specify a parameter for
  `parameterIndex` - the index of the parameter

#### MethodParameter

    public MethodParameter(Method method,
                   int parameterIndex,
                   int nestingLevel)

Create a new MethodParameter for the given method.

Parameters:
  `method` - the Method to specify a parameter for
  `parameterIndex` - the index of the parameter (-1 for the method return type; 0 for the first method parameter, 1 for the second method parameter, etc)
  `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)

#### MethodParameter

    public MethodParameter(Constructor constructor,
                   int parameterIndex)

Create a new MethodParameter for the given constructor, with nesting level 1.

Parameters:
  `constructor` - the Constructor to specify a parameter for
  `parameterIndex` - the index of the parameter

#### MethodParameter

    public MethodParameter(Constructor constructor,
                   int parameterIndex,
                   int nestingLevel)

Create a new MethodParameter for the given constructor.

Parameters:
  `constructor` - the Constructor to specify a parameter for
  `parameterIndex` - the index of the parameter
  `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)

#### MethodParameter

    public MethodParameter(MethodParameter original)

Copy constructor, resulting in an independent MethodParameter object based on the same metadata and cache state that the original object was in.

Parameters:
  `original` - the original MethodParameter object to copy from

### Method Detail

#### getMethod

    public Method getMethod()

Return the wrapped Method, if any.

Note: Either Method or Constructor is available.

Returns:
  the Method, or `null` if none

#### getConstructor

    public Constructor getConstructor()

Return the wrapped Constructor, if any.

Note: Either Method or Constructor is available.

Returns:
  the Constructor, or `null` if none

#### getDeclaringClass

    public Class getDeclaringClass()

Return the class that declares the underlying Method or Constructor.

#### getParameterIndex

    public int getParameterIndex()

Return the index of the method/constructor parameter.

Returns:
  the parameter index (never negative)

#### getParameterType

    public Class<?> getParameterType()

Return the type of the method/constructor parameter.

Returns:
  the parameter type (never `null`)

#### getGenericParameterType

    public Type getGenericParameterType()

Return the generic type of the method/constructor parameter.

Returns:
  the parameter type (never `null`)

#### getNestedParameterType

    public Class<?> getNestedParameterType()

#### getMethodAnnotations

    public Annotation[] getMethodAnnotations()

Return the annotations associated with the target method/constructor itself.

#### getMethodAnnotation

    public <T extends Annotation> T getMethodAnnotation(Class<T> annotationType)

Return the method/constructor annotation of the given type, if available.

Parameters:
  `annotationType` - the annotation type to look for
Returns:
  the annotation object, or `null` if not found

#### getParameterAnnotations

    public Annotation[] getParameterAnnotations()

Return the annotations associated with the specific method/constructor parameter.

#### getParameterAnnotation

    public <T extends Annotation> T getParameterAnnotation(Class<T> annotationType)

Return the parameter annotation of the given type, if available.

Parameters:
  `annotationType` - the annotation type to look for
Returns:
  the annotation object, or `null` if not found

#### hasParameterAnnotations

    public boolean hasParameterAnnotations()

Return true if the parameter has at least one annotation, false if it has none.

#### hasParameterAnnotation

    public <T extends Annotation> boolean hasParameterAnnotation(Class<T> annotationType)

Return true if the parameter has the given annotation type, and false if it doesn't.

#### initParameterNameDiscovery

    public void initParameterNameDiscovery(ParameterNameDiscoverer parameterNameDiscoverer)

Initialize parameter name discovery for this method parameter.

This method does not actually try to retrieve the parameter name at this point; it just allows discovery to happen when the application calls `getParameterName()` (if ever).

#### getParameterName

    public String getParameterName()

Return the name of the method/constructor parameter.

Returns:
  the parameter name (may be `null` if no parameter name metadata is contained in the class file or no `ParameterNameDiscoverer` has been set to begin with)

#### increaseNestingLevel

    public void increaseNestingLevel()

Increase this parameter's nesting level.

See Also:
  `getNestingLevel()`

#### decreaseNestingLevel

    public void decreaseNestingLevel()

Decrease this parameter's nesting level.

See Also:
  `getNestingLevel()`

#### getNestingLevel

    public int getNestingLevel()

Return 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).

#### setTypeIndexForCurrentLevel

    public void setTypeIndexForCurrentLevel(int typeIndex)

Set the type index for the current nesting level.

Parameters:
  `typeIndex` - the corresponding type index (or `null` for the default type index)
See Also:
  `getNestingLevel()`

#### getTypeIndexForCurrentLevel

    public Integer getTypeIndexForCurrentLevel()

Return the type index for the current nesting level.

Returns:
  the corresponding type index, or `null` if none specified (indicating the default type index)
See Also:
  `getNestingLevel()`

#### getTypeIndexForLevel

    public Integer getTypeIndexForLevel(int nestingLevel)

Return the type index for the specified nesting level.

Parameters:
  `nestingLevel` - the nesting level to check
Returns:
  the corresponding type index, or `null` if none specified (indicating the default type index)

#### equals

    public boolean equals(Object obj)

Overrides:
  `equals` in class `Object`

#### hashCode

    public int hashCode()

Overrides:
  `hashCode` in class `Object`

#### forMethodOrConstructor

    public static MethodParameter forMethodOrConstructor(Object methodOrConstructor,
                                         int parameterIndex)

Create a new MethodParameter for the given method or constructor.

This is a convenience constructor for scenarios where a Method or Constructor reference is treated in a generic fashion.

Parameters:
  `methodOrConstructor` - the Method or Constructor to specify a parameter for
  `parameterIndex` - the index of the parameter
Returns:
  the corresponding MethodParameter instance