## Uses of Class
java.lang.invoke.MethodType

- Packages that use MethodType
  Package | Description
  --- | ---
  java.lang | Provides classes that are fundamental to the design of the Java programming language.
  java.lang.invoke | The `java.lang.invoke` package provides low-level primitives for interacting with the Java Virtual Machine.
  jdk.dynalink | Contains interfaces and classes that are used to link an `invokedynamic` call site.
  jdk.dynalink.linker | Contains interfaces and classes needed by language runtimes to implement their own language-specific object models and type conversions.
  jdk.dynalink.linker.support | Contains classes that make it more convenient for language runtimes to implement their own language-specific object models and type conversions by providing basic implementations of some classes as well as various utilities.

- - ### Uses of MethodType in java.lang

    Methods in java.lang that return MethodType
    Modifier and Type | Method | Description
    --- | --- | ---
    `default MethodType` | StackWalker.StackFrame.`getMethodType()` | Returns the `MethodType` representing the parameter types and the return type for the method represented by this stack frame.

  - ### Uses of MethodType in java.lang.invoke

    Methods in java.lang.invoke that return MethodType
    Modifier and Type | Method | Description
    --- | --- | ---
    `MethodType` | VarHandle.`accessModeType​(VarHandle.AccessMode accessMode)` | Obtains the access mode type for this VarHandle and a given access mode.
    `MethodType` | MethodType.`appendParameterTypes​(Class<?>... ptypesToInsert)` | Finds or creates a method type with additional parameter types.
    `MethodType` | MethodType.`appendParameterTypes​(List<Class<?>> ptypesToInsert)` | Finds or creates a method type with additional parameter types.
    `MethodType` | MethodType.`changeParameterType​(int num, Class<?> nptype)` | Finds or creates a method type with a single different parameter type.
    `MethodType` | MethodType.`changeReturnType​(Class<?> nrtype)` | Finds or creates a method type with a different return type.
    `MethodType` | MethodType.`dropParameterTypes​(int start, int end)` | Finds or creates a method type with some parameter types omitted.
    `MethodType` | MethodType.`erase()` | Erases all reference types to `Object`.
    `static MethodType` | MethodType.`fromMethodDescriptorString​(String descriptor, ClassLoader loader)` | Finds or creates an instance of a method type, given the spelling of its bytecode descriptor.
    `MethodType` | MethodType.`generic()` | Converts all types, both reference and primitive, to `Object`.
    `static MethodType` | MethodType.`genericMethodType​(int objectArgCount)` | Finds or creates a method type whose components are all `Object`.
    `static MethodType` | MethodType.`genericMethodType​(int objectArgCount, boolean finalArray)` | Finds or creates a method type whose components are `Object` with an optional trailing `Object[]` array.
    `MethodType` | MethodHandleInfo.`getMethodType()` | Returns the nominal type of the cracked symbolic reference, expressed as a method type.
    `MethodType` | MethodType.`insertParameterTypes​(int num, Class<?>... ptypesToInsert)` | Finds or creates a method type with additional parameter types.
    `MethodType` | MethodType.`insertParameterTypes​(int num, List<Class<?>> ptypesToInsert)` | Finds or creates a method type with additional parameter types.
    `static MethodType` | MethodType.`methodType​(Class<?> rtype)` | Finds or creates a method type with the given components.
    `static MethodType` | MethodType.`methodType​(Class<?> rtype, Class<?> ptype0)` | Finds or creates a method type with the given components.
    `static MethodType` | MethodType.`methodType​(Class<?> rtype, Class<?>[] ptypes)` | Finds or creates an instance of the given method type.
    `static MethodType` | MethodType.`methodType​(Class<?> rtype, Class<?> ptype0, Class<?>... ptypes)` | Finds or creates a method type with the given components.
    `static MethodType` | MethodType.`methodType​(Class<?> rtype, MethodType ptypes)` | Finds or creates a method type with the given components.
    `static MethodType` | MethodType.`methodType​(Class<?> rtype, List<Class<?>> ptypes)` | Finds or creates a method type with the given components.
    `MethodType` | CallSite.`type()` | Returns the type of this call site's target.
    `MethodType` | MethodHandle.`type()` | Reports the type of this method handle.
    `MethodType` | MethodType.`unwrap()` | Converts all wrapper types to their corresponding primitive types.
    `MethodType` | MethodType.`wrap()` | Converts all primitive types to their corresponding wrapper types.

    Methods in java.lang.invoke with parameters of type MethodType
    Modifier and Type | Method | Description
    --- | --- | ---
    `static CallSite` | LambdaMetafactory.`altMetafactory​(MethodHandles.Lookup caller, String invokedName, MethodType invokedType, Object... args)` | Facilitates the creation of simple "function objects" that implement one or more interfaces by delegation to a provided `MethodHandle`, after appropriate type adaptation and partial evaluation of arguments.
    `MethodHandle` | MethodHandle.`asType​(MethodType newType)` | Produces an adapter method handle which adapts the type of the current method handle to a new type.
    `MethodHandle` | MethodHandles.Lookup.`bind​(Object receiver, String name, MethodType type)` | Produces an early-bound method handle for a non-static method.
    `static MethodHandle` | MethodHandles.`empty​(MethodType type)` | Produces a method handle of the requested type which ignores any arguments, does nothing, and returns a suitable default depending on the return type.
    `static MethodHandle` | MethodHandles.`exactInvoker​(MethodType type)` | Produces a special invoker method handle which can be used to invoke any method handle of the given type, as if by `invokeExact`.
    `static MethodHandle` | MethodHandles.`explicitCastArguments​(MethodHandle target, MethodType newType)` | Produces a method handle which adapts the type of the given method handle to a new type by pairwise argument and return type conversion.
    `MethodHandle` | MethodHandles.Lookup.`findConstructor​(Class<?> refc, MethodType type)` | Produces a method handle which creates an object and initializes it, using the constructor of the specified type.
    `MethodHandle` | MethodHandles.Lookup.`findSpecial​(Class<?> refc, String name, MethodType type, Class<?> specialCaller)` | Produces an early-bound method handle for a virtual method.
    `MethodHandle` | MethodHandles.Lookup.`findStatic​(Class<?> refc, String name, MethodType type)` | Produces a method handle for a static method.
    `MethodHandle` | MethodHandles.Lookup.`findVirtual​(Class<?> refc, String name, MethodType type)` | Produces a method handle for a virtual method.
    `static MethodHandle` | MethodHandles.`invoker​(MethodType type)` | Produces a special invoker method handle which can be used to invoke any method handle compatible with the given type, as if by `invoke`.
    `static CallSite` | StringConcatFactory.`makeConcat​(MethodHandles.Lookup lookup, String name, MethodType concatType)` | Facilitates the creation of optimized String concatenation methods, that can be used to efficiently concatenate a known number of arguments of known types, possibly after type adaptation and partial evaluation of arguments.
    `static CallSite` | StringConcatFactory.`makeConcatWithConstants​(MethodHandles.Lookup lookup, String name, MethodType concatType, String recipe, Object... constants)` | Facilitates the creation of optimized String concatenation methods, that can be used to efficiently concatenate a known number of arguments of known types, possibly after type adaptation and partial evaluation of arguments.
    `static CallSite` | LambdaMetafactory.`metafactory​(MethodHandles.Lookup caller, String invokedName, MethodType invokedType, MethodType samMethodType, MethodHandle implMethod, MethodType instantiatedMethodType)` | Facilitates the creation of simple "function objects" that implement one or more interfaces by delegation to a provided `MethodHandle`, after appropriate type adaptation and partial evaluation of arguments.
    `static MethodType` | MethodType.`methodType​(Class<?> rtype, MethodType ptypes)` | Finds or creates a method type with the given components.
    `static MethodHandle` | MethodHandles.`permuteArguments​(MethodHandle target, MethodType newType, int... reorder)` | Produces a method handle which adapts the calling sequence of the given method handle to a new type, by reordering the arguments.
    `static MethodHandle` | MethodHandles.`spreadInvoker​(MethodType type, int leadingArgCount)` | Produces a method handle which will invoke any method handle of the given `type`, with a given number of trailing arguments replaced by a single trailing `Object[]` array.
    `static String` | MethodHandleInfo.`toString​(int kind, Class<?> defc, String name, MethodType type)` | Returns a string representation for a `MethodHandleInfo`, given the four parts of its symbolic reference.
    `static MethodHandle` | MethodHandles.`varHandleExactInvoker​(VarHandle.AccessMode accessMode, MethodType type)` | Produces a special invoker method handle which can be used to invoke a signature-polymorphic access mode method on any VarHandle whose associated access mode type is compatible with the given type.
    `static MethodHandle` | MethodHandles.`varHandleInvoker​(VarHandle.AccessMode accessMode, MethodType type)` | Produces a special invoker method handle which can be used to invoke a signature-polymorphic access mode method on any VarHandle whose associated access mode type is compatible with the given type.

    Constructors in java.lang.invoke with parameters of type MethodType
    Constructor | Description
    --- | ---
    `ConstantCallSite​(MethodType targetType, MethodHandle createTargetHook)` | Creates a call site with a permanent target, possibly bound to the call site itself.
    `MutableCallSite​(MethodType type)` | Creates a blank call site object with the given method type.
    `VolatileCallSite​(MethodType type)` | Creates a call site with a volatile binding to its target.

  - ### Uses of MethodType in jdk.dynalink

    Methods in jdk.dynalink that return MethodType
    Modifier and Type | Method | Description
    --- | --- | ---
    `MethodType` | CallSiteDescriptor.`getMethodType()` | The type of the method at the call site.

    Methods in jdk.dynalink with parameters of type MethodType
    Modifier and Type | Method | Description
    --- | --- | ---
    `CallSiteDescriptor` | CallSiteDescriptor.`changeMethodType​(MethodType newMethodType)` | Finds or creates a call site descriptor that only differs in its method type from this descriptor.
    `protected CallSiteDescriptor` | CallSiteDescriptor.`changeMethodTypeInternal​(MethodType newMethodType)` | Finds or creates a call site descriptor that only differs in its method type from this descriptor.

    Constructors in jdk.dynalink with parameters of type MethodType
    Constructor | Description
    --- | ---
    `CallSiteDescriptor​(MethodHandles.Lookup lookup, Operation operation, MethodType methodType)` | Creates a new call site descriptor.

  - ### Uses of MethodType in jdk.dynalink.linker

    Methods in jdk.dynalink.linker with parameters of type MethodType
    Modifier and Type | Method | Description
    --- | --- | ---
    `GuardedInvocation` | GuardedInvocation.`asType​(MethodType newType)` | Changes the type of the invocation, as if `MethodHandle.asType(MethodType)` was applied to its invocation and its guard, if it has one (with return type changed to boolean, and parameter count potentially truncated for the guard).
    `GuardedInvocation` | GuardedInvocation.`asType​(LinkerServices linkerServices, MethodType newType)` | Changes the type of the invocation, as if `LinkerServices.asType(MethodHandle, MethodType)` was applied to its invocation and its guard, if it has one (with return type changed to boolean, and parameter count potentially truncated for the guard).
    `MethodHandle` | LinkerServices.`asType​(MethodHandle handle, MethodType fromType)` | Similar to `MethodHandle.asType(MethodType)` except it also hooks in method handles produced by all available `GuardingTypeConverterFactory` implementations, providing for language-specific type coercing of parameters.
    `MethodHandle` | MethodTypeConversionStrategy.`asType​(MethodHandle target, MethodType newType)` | Converts a method handle to a new type.
    `default MethodHandle` | LinkerServices.`asTypeLosslessReturn​(MethodHandle handle, MethodType fromType)` | Similar to `LinkerServices.asType(MethodHandle, MethodType)` except it treats return value type conversion specially.
    `GuardedInvocation` | GuardedInvocation.`asTypeSafeReturn​(LinkerServices linkerServices, MethodType newType)` | Changes the type of the invocation, as if `LinkerServices.asTypeLosslessReturn(MethodHandle, MethodType)` was applied to its invocation and `LinkerServices.asType(MethodHandle, MethodType)` applied to its guard, if it has one (with return type changed to boolean, and parameter count potentially truncated for the guard).

  - ### Uses of MethodType in jdk.dynalink.linker.support

    Methods in jdk.dynalink.linker.support with parameters of type MethodType
    Modifier and Type | Method | Description
    --- | --- | ---
    `static MethodHandle` | Guards.`asType​(MethodHandle test, MethodType type)` | Takes a method handle intended to be used as a guard, and adapts it to the requested type, but returning a boolean.
    `static MethodHandle` | Guards.`asType​(LinkerServices linkerServices, MethodHandle test, MethodType type)` | Takes a method handle intended to be used as a guard, and adapts it to the requested type, but returning a boolean.
    `MethodHandle` | Lookup.`findSpecial​(Class<?> declaringClass, String name, MethodType type)` | Performs a `MethodHandles.Lookup.findSpecial(Class, String, MethodType, Class)` on the underlying lookup.
    `MethodHandle` | Lookup.`findStatic​(Class<?> declaringClass, String name, MethodType type)` | Performs a `MethodHandles.Lookup.findStatic(Class, String, MethodType)` on the underlying lookup.
    `MethodHandle` | Lookup.`findVirtual​(Class<?> declaringClass, String name, MethodType type)` | Performs a `MethodHandles.Lookup.findVirtual(Class, String, MethodType)` on the underlying lookup.
    `static MethodHandle` | Guards.`isArray​(int pos, MethodType type)` | Creates a method handle that returns true if the argument in the specified position is a Java array.
    `static MethodHandle` | Guards.`isInstance​(Class<?> clazz, int pos, MethodType type)` | Creates a method handle with arguments of a specified type, but with boolean return value.
    `static MethodHandle` | Guards.`isInstance​(Class<?> clazz, MethodType type)` | Creates a method handle with arguments of a specified type, but with boolean return value.
    `static MethodHandle` | Guards.`isOfClass​(Class<?> clazz, MethodType type)` | Creates a guard method handle with arguments of a specified type, but with boolean return value.