Lenguaje

MethodHandles.SpreadInvoker(MethodType, Int32) Método

Definición

Genera un identificador de método que invocará cualquier identificador de método del especificado type, con un número determinado de argumentos finales reemplazados por una única matriz final Object[] .

[Android.Runtime.Register("spreadInvoker", "(Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)]
public static Java.Lang.Invoke.MethodHandle? SpreadInvoker(Java.Lang.Invoke.MethodType? type, int leadingArgCount);
[<Android.Runtime.Register("spreadInvoker", "(Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)>]
static member SpreadInvoker : Java.Lang.Invoke.MethodType * int -> Java.Lang.Invoke.MethodHandle

Parámetros

type
MethodType

el tipo de destino deseado

leadingArgCount
Int32

número de argumentos fijos, que se pasarán sin cambios al destino.

Devoluciones

un identificador de método adecuado para invocar cualquier identificador de método del tipo especificado

Atributos

Comentarios

Genera un identificador de método que invocará cualquier identificador de método del especificado type, con un número determinado de argumentos finales reemplazados por una única matriz final Object[] . El invocador resultante será un identificador de método con los argumentos siguientes: <ul><li un único MethodHandle valor>de destino <li>cero o más valores iniciales (contados por leadingArgCount) <li>una Object[] matriz que contiene argumentos finales </ul>

El invocador invocará su destino como una llamada a MethodHandle#invoke invoke con el indicado type. Es decir, si el destino es exactamente del especificado type, se comportará como invokeExact; de lo contrario, se comportará como si MethodHandle#asType asType se usa para convertir el destino en el requerido type.

El tipo del invocador devuelto no será el especificado type, sino que tendrá todos los parámetros excepto el primero leadingArgCount reemplazado por una sola matriz de tipo Object[], que será el parámetro final.

Antes de invocar su destino, el invocador distribuirá la matriz final, aplicará las conversiones de referencia según sea necesario y desenlazará y desenlazará los argumentos primitivos. Si, cuando se llama al invocador, el argumento de matriz proporcionado no tiene el número correcto de elementos, el invocador producirá una IllegalArgumentException excepción en lugar de invocar el destino.

Este método es equivalente al código siguiente (aunque puede ser más eficaz): <blockquote>

{@code
            MethodHandle invoker = MethodHandles.invoker(type);
            int spreadArgCount = type.parameterCount() - leadingArgCount;
            invoker = invoker.asSpreader(Object[].class, spreadArgCount);
            return invoker;
            }

</blockquote> Este método no produce excepciones de seguridad ni reflectantes.

Java documentación para java.lang.invoke.MethodHandles.spreadInvoker(java.lang.invoke.MethodType, int).

Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el Android y se usan según los términos descritos en creative Creative Commons 2.5 Attribution License.

Se aplica a