MethodHandles.PermuteArguments(MethodHandle, 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 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 #O
y cada elemento debe ser un número no negativo menor que #I
. Para cada N
menor que #O
, el N
argumento de salida -th se tomará del I
argumento 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>
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.