Compartir a través de


MethodHandles.PermuteArguments(MethodHandle, MethodType, Int32[]) Método

Definición

Genera un identificador de método que adapta la secuencia de llamada del identificador de método dado a un nuevo tipo, reordenando los argumentos.

[Android.Runtime.Register("permuteArguments", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;[I)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)]
public static Java.Lang.Invoke.MethodHandle? PermuteArguments (Java.Lang.Invoke.MethodHandle? target, Java.Lang.Invoke.MethodType? newType, params int[]? reorder);
[<Android.Runtime.Register("permuteArguments", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;[I)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)>]
static member PermuteArguments : Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodType * int[] -> Java.Lang.Invoke.MethodHandle

Parámetros

target
MethodHandle

identificador del método que se va a invocar después de que se reordenan los argumentos

newType
MethodType

el tipo esperado del nuevo identificador de método

reorder
Int32[]

matriz de índices que controla el reordenamiento

Devoluciones

un identificador de método que delega al destino después de quitar argumentos no utilizado y mueve o duplica los demás argumentos.

Atributos

Comentarios

Genera un identificador de método que adapta la secuencia de llamada del identificador de método dado a un nuevo tipo, reordenando los argumentos. Se garantiza que el identificador del método resultante notifique un tipo que sea igual al nuevo tipo deseado.

La matriz especificada controla la reordenación. Llame #I al número de parámetros entrantes (el valor newType.parameterCount()y llame al #O número de parámetros salientes (el valor target.type().parameterCount()). A continuación, la longitud de la matriz de reordenación debe ser #Oy cada elemento debe ser un número no negativo menor que #I. Para cada N menor que #O, el Nargumento de salida -th se tomará del Iargumento entrante -th, donde I es reorder[N].

No se aplica ninguna conversión de argumento o valor devuelto. El tipo de cada argumento entrante, determinado por newType, debe ser idéntico al tipo del parámetro o parámetros salientes correspondientes en el identificador del método de destino. El tipo de valor devuelto de newType debe ser idéntico al tipo de valor devuelto del destino original.

La matriz de reordenación no necesita especificar una permutación real. Se duplicará un argumento entrante si su índice aparece más de una vez en la matriz y se quitará un argumento entrante si su índice no aparece en la matriz. Como en el caso de #dropArguments(MethodHandle,int,List) dropArguments, los argumentos entrantes que no se mencionan en la matriz de reordenación pueden ser cualquier tipo, según lo determinado únicamente por newType. <blockquote>

{@code
            import static java.lang.invoke.MethodHandles.*;
            import static java.lang.invoke.MethodType.*;
            ...
            MethodType intfn1 = methodType(int.class, int.class);
            MethodType intfn2 = methodType(int.class, int.class, int.class);
            MethodHandle sub = ... (int x, int y) -> (x-y) ...;
            assert(sub.type().equals(intfn2));
            MethodHandle sub1 = permuteArguments(sub, intfn2, 0, 1);
            MethodHandle rsub = permuteArguments(sub, intfn2, 1, 0);
            assert((int)rsub.invokeExact(1, 100) == 99);
            MethodHandle add = ... (int x, int y) -> (x+y) ...;
            assert(add.type().equals(intfn2));
            MethodHandle twice = permuteArguments(add, intfn1, 0, 0);
            assert(twice.type().equals(intfn1));
            assert((int)twice.invokeExact(21) == 42);
            }

</blockquote>

Documentación de Java para java.lang.invoke.MethodHandles.permuteArguments(java.lang.invoke.MethodHandle, java.lang.invoke.MethodType, int...).

Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el proyecto de código abierto de Android y se usan según los términos descritos en la licencia de atribución de Creative Commons 2.5.

Se aplica a