Class MethodParameter
- Direct Known Subclasses:
SynthesizingMethodParameter
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.
As of 4.2, there is a SynthesizingMethodParameter
subclass available which synthesizes annotations with attribute aliases. That subclass is used
for web and message endpoint processing, in particular.
- Since:
- 2.0
- Author:
- Juergen Hoeller, Rob Harrop, Andy Clement, Sam Brannen, Sebastien Deleuze, Phillip Webb
- See Also:
-
Constructor Summary
ConstructorDescriptionMethodParameter
(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 newMethodParameter
for the given method, with nesting level 1.MethodParameter
(Method method, int parameterIndex, int nestingLevel) Create a newMethodParameter
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
Modifier and TypeMethodDescriptionprotected <A extends Annotation>
AadaptAnnotation
(A annotation) A template method to post-process a given annotation instance before returning it to the caller.protected Annotation[]
adaptAnnotationArray
(Annotation[] annotations) A template method to post-process a given annotation array before returning it to the caller.clone()
void
Deprecated.boolean
protected static int
findParameterIndex
(Parameter parameter) static MethodParameter
forExecutable
(Executable executable, int parameterIndex) Create a new MethodParameter for the given method or constructor.static MethodParameter
forFieldAwareConstructor
(Constructor<?> ctor, int parameterIndex, String fieldName) Create a new MethodParameter for the given field-aware constructor, for example, on a data class or record type.static MethodParameter
forMethodOrConstructor
(Object methodOrConstructor, int parameterIndex) Deprecated.as of 5.0, in favor offorExecutable(java.lang.reflect.Executable, int)
static MethodParameter
forParameter
(Parameter parameter) Create a new MethodParameter for the given parameter descriptor.Return the wrapped annotated element.Return the wrapped Constructor, if any.Class<?>
Return the containing class for this method parameter.Class<?>
Return the class that declares the underlying Method or Constructor.Return the wrapped executable.Return the generic type of the method/constructor parameter.Return the wrapped member.Return the wrapped Method, if any.<A extends Annotation>
@Nullable AgetMethodAnnotation
(Class<A> annotationType) Return the method/constructor annotation of the given type, if available.Return the annotations associated with the target method/constructor itself.Return the nested generic type of the method/constructor parameter.Class<?>
Return the nested type of the method/constructor parameter.int
Return the nesting level of the target type (typically 1; for example, in case of a List of Lists, 1 would indicate the nested List, whereas 2 would indicate the element of the nested List).Return theParameter
descriptor for method/constructor parameter.<A extends Annotation>
@Nullable AgetParameterAnnotation
(Class<A> annotationType) Return the parameter annotation of the given type, if available.Return the annotations associated with the specific method/constructor parameter.int
Return the index of the method/constructor parameter.Return the name of the method/constructor parameter.Class<?>
Return the type of the method/constructor parameter.Return the type index for the current nesting level.getTypeIndexForLevel
(int nestingLevel) Return the type index for the specified nesting level.int
hashCode()
<A extends Annotation>
booleanhasMethodAnnotation
(Class<A> annotationType) Return whether the method/constructor is annotated with the given type.<A extends Annotation>
booleanhasParameterAnnotation
(Class<A> annotationType) Return whether the parameter is declared with the given annotation type.boolean
Returntrue
if the parameter has at least one annotation,false
if it has none.void
Deprecated.since 5.2 in favor ofnested(Integer)
void
initParameterNameDiscovery
(@Nullable ParameterNameDiscoverer parameterNameDiscoverer) Initialize parameter name discovery for this method parameter.boolean
Return whether this method indicates a parameter which is not required: either in the form of Java 8'sOptional
, any variant of a parameter-levelNullable
annotation (such as from JSpecify, JSR-305 or Jakarta set of annotations), or a language-level nullable type declaration orContinuation
parameter in Kotlin.nested()
Return a variant of thisMethodParameter
which points to the same parameter but one nesting level deeper.Return a variant of thisMethodParameter
which points to the same parameter but one nesting level deeper.Return a variant of thisMethodParameter
which points to the same parameter but one nesting level deeper in case of aOptional
declaration.void
setTypeIndexForCurrentLevel
(int typeIndex) Deprecated.since 5.2 in favor ofwithTypeIndex(int)
toString()
withContainingClass
(@Nullable Class<?> containingClass) Return a variant of thisMethodParameter
which refers to the given containing class.withTypeIndex
(int typeIndex) Return a variant of thisMethodParameter
with the type for the current level set to the specified value.
-
Constructor Details
-
MethodParameter
Create a newMethodParameter
for the given method, with nesting level 1.- Parameters:
method
- the Method to specify a parameter forparameterIndex
- the index of the parameter: -1 for the method return type; 0 for the first method parameter; 1 for the second method parameter, etc.
-
MethodParameter
Create a newMethodParameter
for the given method.- Parameters:
method
- the Method to specify a parameter forparameterIndex
- 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; for example, in case of a List of Lists, 1 would indicate the nested List, whereas 2 would indicate the element of the nested List)
-
MethodParameter
Create a new MethodParameter for the given constructor, with nesting level 1.- Parameters:
constructor
- the Constructor to specify a parameter forparameterIndex
- the index of the parameter
-
MethodParameter
Create a new MethodParameter for the given constructor.- Parameters:
constructor
- the Constructor to specify a parameter forparameterIndex
- the index of the parameternestingLevel
- the nesting level of the target type (typically 1; for example, in case of a List of Lists, 1 would indicate the nested List, whereas 2 would indicate the element of the nested List)
-
MethodParameter
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 Details
-
getMethod
Return the wrapped Method, if any.Note: Either Method or Constructor is available.
- Returns:
- the Method, or
null
if none
-
getConstructor
Return the wrapped Constructor, if any.Note: Either Method or Constructor is available.
- Returns:
- the Constructor, or
null
if none
-
getDeclaringClass
Return the class that declares the underlying Method or Constructor. -
getMember
Return the wrapped member.- Returns:
- the Method or Constructor as Member
-
getAnnotatedElement
Return the wrapped annotated element.Note: This method exposes the annotations declared on the method/constructor itself (i.e. at the method/constructor level, not at the parameter level).
To get the
AnnotatedElement
at the parameter level, usegetParameter()
.- Returns:
- the Method or Constructor as AnnotatedElement
-
getExecutable
Return the wrapped executable.- Returns:
- the Method or Constructor as Executable
- Since:
- 5.0
-
getParameter
Return theParameter
descriptor for method/constructor parameter.- Since:
- 5.0
-
getParameterIndex
public int getParameterIndex()Return the index of the method/constructor parameter.- Returns:
- the parameter index (-1 in case of the return type)
-
increaseNestingLevel
Deprecated.since 5.2 in favor ofnested(Integer)
Increase this parameter's nesting level.- See Also:
-
decreaseNestingLevel
Deprecated.since 5.2 in favor of retaining the original MethodParameter and usingnested(Integer)
if nesting is requiredDecrease this parameter's nesting level.- See Also:
-
getNestingLevel
public int getNestingLevel()Return the nesting level of the target type (typically 1; for example, in case of a List of Lists, 1 would indicate the nested List, whereas 2 would indicate the element of the nested List). -
withTypeIndex
Return a variant of thisMethodParameter
with the type for the current level set to the specified value.- Parameters:
typeIndex
- the new type index- Since:
- 5.2
-
setTypeIndexForCurrentLevel
Deprecated.since 5.2 in favor ofwithTypeIndex(int)
Set the type index for the current nesting level.- Parameters:
typeIndex
- the corresponding type index (ornull
for the default type index)- See Also:
-
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:
-
getTypeIndexForLevel
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)
-
nested
Return a variant of thisMethodParameter
which points to the same parameter but one nesting level deeper.- Since:
- 4.3
-
nested
Return a variant of thisMethodParameter
which points to the same parameter but one nesting level deeper.- Parameters:
typeIndex
- the type index for the new nesting level- Since:
- 5.2
-
isOptional
public boolean isOptional()Return whether this method indicates a parameter which is not required: either in the form of Java 8'sOptional
, any variant of a parameter-levelNullable
annotation (such as from JSpecify, JSR-305 or Jakarta set of annotations), or a language-level nullable type declaration orContinuation
parameter in Kotlin.- Since:
- 4.3
-
nestedIfOptional
Return a variant of thisMethodParameter
which points to the same parameter but one nesting level deeper in case of aOptional
declaration.- Since:
- 4.3
- See Also:
-
withContainingClass
Return a variant of thisMethodParameter
which refers to the given containing class.- Parameters:
containingClass
- a specific containing class (potentially a subclass of the declaring class, for example, substituting a type variable)- Since:
- 5.2
- See Also:
-
getContainingClass
Return the containing class for this method parameter.- Returns:
- a specific containing class (potentially a subclass of the declaring class), or otherwise simply the declaring class itself
- See Also:
-
getParameterType
Return the type of the method/constructor parameter.- Returns:
- the parameter type (never
null
)
-
getGenericParameterType
Return the generic type of the method/constructor parameter.- Returns:
- the parameter type (never
null
) - Since:
- 3.0
-
getNestedParameterType
Return the nested type of the method/constructor parameter.- Returns:
- the parameter type (never
null
) - Since:
- 3.1
- See Also:
-
getNestedGenericParameterType
Return the nested generic type of the method/constructor parameter.- Returns:
- the parameter type (never
null
) - Since:
- 4.2
- See Also:
-
getMethodAnnotations
Return the annotations associated with the target method/constructor itself. -
getMethodAnnotation
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
-
hasMethodAnnotation
Return whether the method/constructor is annotated with the given type.- Parameters:
annotationType
- the annotation type to look for- Since:
- 4.3
- See Also:
-
getParameterAnnotations
Return the annotations associated with the specific method/constructor parameter. -
hasParameterAnnotations
public boolean hasParameterAnnotations()Returntrue
if the parameter has at least one annotation,false
if it has none.- See Also:
-
getParameterAnnotation
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
-
hasParameterAnnotation
Return whether the parameter is declared with the given annotation type.- Parameters:
annotationType
- the annotation type to look for- See Also:
-
initParameterNameDiscovery
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
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 noParameterNameDiscoverer
has been set to begin with)
-
adaptAnnotation
A template method to post-process a given annotation instance before returning it to the caller.The default implementation simply returns the given annotation as-is.
- Parameters:
annotation
- the annotation about to be returned- Returns:
- the post-processed annotation (or simply the original one)
- Since:
- 4.2
-
adaptAnnotationArray
A template method to post-process a given annotation array before returning it to the caller.The default implementation simply returns the given annotation array as-is.
- Parameters:
annotations
- the annotation array about to be returned- Returns:
- the post-processed annotation array (or simply the original one)
- Since:
- 4.2
-
equals
-
hashCode
public int hashCode() -
toString
-
clone
-
forMethodOrConstructor
@Deprecated public static MethodParameter forMethodOrConstructor(Object methodOrConstructor, int parameterIndex) Deprecated.as of 5.0, in favor offorExecutable(java.lang.reflect.Executable, int)
Create a new MethodParameter for the given method or constructor.This is a convenience factory method for scenarios where a Method or Constructor reference is treated in a generic fashion.
- Parameters:
methodOrConstructor
- the Method or Constructor to specify a parameter forparameterIndex
- the index of the parameter- Returns:
- the corresponding MethodParameter instance
-
forExecutable
Create a new MethodParameter for the given method or constructor.This is a convenience factory method for scenarios where a Method or Constructor reference is treated in a generic fashion.
- Parameters:
executable
- the Method or Constructor to specify a parameter forparameterIndex
- the index of the parameter- Returns:
- the corresponding MethodParameter instance
- Since:
- 5.0
-
forParameter
Create a new MethodParameter for the given parameter descriptor.This is a convenience factory method for scenarios where a Java 8
Parameter
descriptor is already available.- Parameters:
parameter
- the parameter descriptor- Returns:
- the corresponding MethodParameter instance
- Since:
- 5.0
-
findParameterIndex
-
forFieldAwareConstructor
public static MethodParameter forFieldAwareConstructor(Constructor<?> ctor, int parameterIndex, String fieldName) Create a new MethodParameter for the given field-aware constructor, for example, on a data class or record type.A field-aware method parameter will detect field annotations as well, as long as the field name matches the parameter name.
- Parameters:
ctor
- the Constructor to specify a parameter forparameterIndex
- the index of the parameterfieldName
- the name of the underlying field, matching the constructor's parameter name- Returns:
- the corresponding MethodParameter instance
- Since:
- 6.1
-
nested(Integer)
if nesting is required