MethodHandles.SpreadInvoker(MethodType, Int32) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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.
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.