Module java.base
Package java.lang.constant

# Interface MethodTypeDesc

All Superinterfaces:
  `ConstantDesc`, `TypeDescriptor`, `TypeDescriptor.OfMethod<ClassDesc,MethodTypeDesc>`

public sealed interface MethodTypeDesc extends ConstantDesc, TypeDescriptor.OfMethod<ClassDesc,MethodTypeDesc>
A nominal descriptor for a MethodType constant.

Since:
  12

## Nested Class Summary

## Nested classes/interfaces declared in interface java.lang.invoke.TypeDescriptor

`TypeDescriptor.OfField<F extends TypeDescriptor.OfField<F>>, TypeDescriptor.OfMethod<F extends TypeDescriptor.OfField<F>,M extends TypeDescriptor.OfMethod<F,M>>`

## Method Summary

Modifier and Type
Method
Description
`MethodTypeDesc`
`changeParameterType(int index, ClassDesc paramType)`
Returns a MethodTypeDesc that is identical to this one, except that a single parameter type has been changed to the specified type.
`MethodTypeDesc`
`changeReturnType(ClassDesc returnType)`
Returns a MethodTypeDesc that is identical to this one, except with the specified return type.
`default String`
`descriptorString()`
Returns the method type descriptor string.
`default String`
`displayDescriptor()`
Returns a human-readable descriptor for this method type, using the canonical names for parameter and return types.
`MethodTypeDesc`
`dropParameterTypes(int start, int end)`
Returns a MethodTypeDesc that is identical to this one, except that a range of parameter types have been removed.
`boolean`
`equals(Object o)`
Compares the specified object with this descriptor for equality.
`MethodTypeDesc`
`insertParameterTypes(int pos, ClassDesc... paramTypes)`
Returns a MethodTypeDesc that is identical to this one, except that a range of additional parameter types have been inserted.
`static MethodTypeDesc`
`of(ClassDesc returnDesc, ClassDesc... paramDescs)`
Returns a MethodTypeDesc given the return type and parameter types.
`static MethodTypeDesc`
`ofDescriptor(String descriptor)`
Creates a MethodTypeDesc given a method descriptor string.
`ClassDesc[]`
`parameterArray()`
Returns the parameter types as an array.
`int`
`parameterCount()`
Returns the number of parameters of the method type described by this MethodTypeDesc.
`List<ClassDesc>`
`parameterList()`
Returns the parameter types as an immutable `List`.
`ClassDesc`
`parameterType(int index)`
Returns the parameter type of the `index`'th parameter of the method type described by this MethodTypeDesc.
`ClassDesc`
`returnType()`
Gets the return type of the method type described by this MethodTypeDesc.

### Methods declared in interface java.lang.constant.ConstantDesc

`resolveConstantDesc`

## Method Details

### ofDescriptor

static MethodTypeDesc ofDescriptor(String descriptor)
Creates a MethodTypeDesc given a method descriptor string.

Parameters:
  `descriptor` - a method descriptor string
Returns:
  a MethodTypeDesc describing the desired method type
Throws:
  `NullPointerException` - if the argument is `null`
  `IllegalArgumentException` - if the descriptor string is not a valid method descriptor
See Java Virtual Machine Specification:
  4.3.3 Method Descriptors

### of

static MethodTypeDesc of(ClassDesc returnDesc, ClassDesc... paramDescs)
Returns a MethodTypeDesc given the return type and parameter types.

Parameters:
  `returnDesc` - a ClassDesc describing the return type
  `paramDescs` - ClassDescs describing the argument types
Returns:
  a MethodTypeDesc describing the desired method type
Throws:
  `NullPointerException` - if any argument or its contents are `null`
  `IllegalArgumentException` - if any element of `paramDescs` is a `ClassDesc` for `void`

### returnType

ClassDesc returnType()
Gets the return type of the method type described by this MethodTypeDesc.

Specified by:
  `returnType` in interface `TypeDescriptor.OfMethod<ClassDesc,MethodTypeDesc>`
Returns:
  a `ClassDesc` describing the return type of the method type

### parameterCount

int parameterCount()
Returns the number of parameters of the method type described by this MethodTypeDesc.

Specified by:
  `parameterCount` in interface `TypeDescriptor.OfMethod<ClassDesc,MethodTypeDesc>`
Returns:
  the number of parameters

### parameterType

ClassDesc parameterType(int index)
Returns the parameter type of the `index`'th parameter of the method type described by this MethodTypeDesc.

Specified by:
  `parameterType` in interface `TypeDescriptor.OfMethod<ClassDesc,MethodTypeDesc>`
Parameters:
  `index` - the index of the parameter to retrieve
Returns:
  a `ClassDesc` describing the desired parameter type
Throws:
  `IndexOutOfBoundsException` - if the index is outside the half-open range `[0, parameterCount())`

### parameterList

List<ClassDesc> parameterList()
Returns the parameter types as an immutable `List`.

Specified by:
  `parameterList` in interface `TypeDescriptor.OfMethod<ClassDesc,MethodTypeDesc>`
Returns:
  a `List` of `ClassDesc` describing the parameter types

### parameterArray

ClassDesc[] parameterArray()
Returns the parameter types as an array.

Specified by:
  `parameterArray` in interface `TypeDescriptor.OfMethod<ClassDesc,MethodTypeDesc>`
Returns:
  an array of `ClassDesc` describing the parameter types

### changeReturnType

MethodTypeDesc changeReturnType(ClassDesc returnType)
Returns a MethodTypeDesc that is identical to this one, except with the specified return type.

Specified by:
  `changeReturnType` in interface `TypeDescriptor.OfMethod<ClassDesc,MethodTypeDesc>`
Parameters:
  `returnType` - a `ClassDesc` describing the new return type
Returns:
  a MethodTypeDesc describing the desired method type
Throws:
  `NullPointerException` - if the argument is `null`

### changeParameterType

MethodTypeDesc changeParameterType(int index, ClassDesc paramType)
Returns a MethodTypeDesc that is identical to this one, except that a single parameter type has been changed to the specified type.

Specified by:
  `changeParameterType` in interface `TypeDescriptor.OfMethod<ClassDesc,MethodTypeDesc>`
Parameters:
  `index` - the index of the parameter to change
  `paramType` - a `ClassDesc` describing the new parameter type
Returns:
  a MethodTypeDesc describing the desired method type
Throws:
  `NullPointerException` - if any argument is `null`
  `IndexOutOfBoundsException` - if the index is outside the half-open range `[0, parameterCount)`

### dropParameterTypes

MethodTypeDesc dropParameterTypes(int start, int end)
Returns a MethodTypeDesc that is identical to this one, except that a range of parameter types have been removed.

Specified by:
  `dropParameterTypes` in interface `TypeDescriptor.OfMethod<ClassDesc,MethodTypeDesc>`
Parameters:
  `start` - the index of the first parameter to remove
  `end` - the index after the last parameter to remove
Returns:
  a MethodTypeDesc describing the desired method type
Throws:
  `IndexOutOfBoundsException` - if `start` is outside the half-open range `[0, parameterCount)`, or `end` is outside the closed range `[0, parameterCount]`, or if `start > end`

### insertParameterTypes

MethodTypeDesc insertParameterTypes(int pos, ClassDesc... paramTypes)
Returns a MethodTypeDesc that is identical to this one, except that a range of additional parameter types have been inserted.

Specified by:
  `insertParameterTypes` in interface `TypeDescriptor.OfMethod<ClassDesc,MethodTypeDesc>`
Parameters:
  `pos` - the index at which to insert the first inserted parameter
  `paramTypes` - `ClassDesc`s describing the new parameter types to insert
Returns:
  a MethodTypeDesc describing the desired method type
Throws:
  `NullPointerException` - if any argument or its contents are `null`
  `IndexOutOfBoundsException` - if `pos` is outside the closed range `[0, parameterCount]`
  `IllegalArgumentException` - if any element of `paramTypes` is a `ClassDesc` for `void`

### descriptorString

default String descriptorString()
Returns the method type descriptor string.

Specified by:
  `descriptorString` in interface `TypeDescriptor`
Returns:
  the method type descriptor string
See Java Virtual Machine Specification:
  4.3.3 Method Descriptors

### displayDescriptor

default String displayDescriptor()
Returns a human-readable descriptor for this method type, using the canonical names for parameter and return types.

Returns:
  the human-readable descriptor for this method type

### equals

boolean equals(Object o)
Compares the specified object with this descriptor for equality. Returns `true` if and only if the specified object is also a MethodTypeDesc both have the same arity, their return types are equal, and each pair of corresponding parameter types are equal.

Overrides:
  `equals` in class `Object`
Parameters:
  `o` - the other object
Returns:
  whether this descriptor is equal to the other object
See Also:
  - `Object.hashCode()`
  - `HashMap`