MethodHandles.FoldArguments 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í.
Sobrecargas
FoldArguments(MethodHandle, Int32, MethodHandle) |
Adapta un identificador de método de destino mediante el preprocesamiento de algunos de sus argumentos, comenzando en una posición determinada y, a continuación, llamando al destino con el resultado del preprocesamiento, insertado en la secuencia original de argumentos justo antes de los argumentos plegados. |
FoldArguments(MethodHandle, MethodHandle) |
Adapta un identificador de método de destino mediante el preprocesamiento de algunos de sus argumentos y, a continuación, llama al destino con el resultado del preprocesamiento, insertado en la secuencia original de argumentos. |
FoldArguments(MethodHandle, Int32, MethodHandle)
Adapta un identificador de método de destino mediante el preprocesamiento de algunos de sus argumentos, comenzando en una posición determinada y, a continuación, llamando al destino con el resultado del preprocesamiento, insertado en la secuencia original de argumentos justo antes de los argumentos plegados.
[Android.Runtime.Register("foldArguments", "(Ljava/lang/invoke/MethodHandle;ILjava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)]
public static Java.Lang.Invoke.MethodHandle? FoldArguments (Java.Lang.Invoke.MethodHandle? target, int pos, Java.Lang.Invoke.MethodHandle? combiner);
[<Android.Runtime.Register("foldArguments", "(Ljava/lang/invoke/MethodHandle;ILjava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)>]
static member FoldArguments : Java.Lang.Invoke.MethodHandle * int * Java.Lang.Invoke.MethodHandle -> Java.Lang.Invoke.MethodHandle
Parámetros
- target
- MethodHandle
identificador de método que se va a invocar después de combinar argumentos
- pos
- Int32
la posición en la que se va a iniciar el plegado y en la que se va a insertar el resultado de plegado; si es 0
, el efecto es el mismo que para #foldArguments(MethodHandle, MethodHandle)
.
- combiner
- MethodHandle
identificador de método para llamar inicialmente a los argumentos entrantes
Devoluciones
identificador de método que incorpora la lógica de plegado de argumentos especificada
- Atributos
Comentarios
Adapta un identificador de método de destino mediante el preprocesamiento de algunos de sus argumentos, comenzando en una posición determinada y, a continuación, llamando al destino con el resultado del preprocesamiento, insertado en la secuencia original de argumentos justo antes de los argumentos plegados.
Este método está estrechamente relacionado con #foldArguments(MethodHandle, MethodHandle)
, pero permite controlar la posición de la lista de parámetros en la que tiene lugar el plegado. El argumento que controla esto, pos
, es un índice de base cero. El método #foldArguments(MethodHandle, MethodHandle)
mencionado anteriormente asume la posición 0.
Agregado en 9.
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
FoldArguments(MethodHandle, MethodHandle)
Adapta un identificador de método de destino mediante el preprocesamiento de algunos de sus argumentos y, a continuación, llama al destino con el resultado del preprocesamiento, insertado en la secuencia original de argumentos.
[Android.Runtime.Register("foldArguments", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)]
public static Java.Lang.Invoke.MethodHandle? FoldArguments (Java.Lang.Invoke.MethodHandle? target, Java.Lang.Invoke.MethodHandle? combiner);
[<Android.Runtime.Register("foldArguments", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)>]
static member FoldArguments : Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle -> Java.Lang.Invoke.MethodHandle
Parámetros
- target
- MethodHandle
identificador de método que se va a invocar después de combinar argumentos
- combiner
- MethodHandle
identificador de método para llamar inicialmente a los argumentos entrantes
Devoluciones
identificador de método que incorpora la lógica de plegado de argumentos especificada
- Atributos
Comentarios
Adapta un identificador de método de destino mediante el preprocesamiento de algunos de sus argumentos y, a continuación, llama al destino con el resultado del preprocesamiento, insertado en la secuencia original de argumentos.
El procesamiento previo se realiza mediante combiner
, un segundo identificador de método. De los argumentos pasados al adaptador, los primeros N
argumentos se copian en el combinador, al que se llama a continuación. (Aquí, N
se define como el recuento de parámetros del combinador). Después de esto, el control pasa al destino, con cualquier resultado del combinador insertado antes de los argumentos entrantes originales N
.
Si el combinador devuelve un valor, el primer tipo de parámetro del destino debe ser idéntico al tipo de valor devuelto del combinador y los tipos de parámetro siguientes N
del destino deben coincidir exactamente con los parámetros del combinador.
Si el combinador tiene un valor devuelto nulo, no se insertará ningún resultado y los primeros N
tipos de parámetro del destino deben coincidir exactamente con los parámetros del combinador.
El adaptador resultante es el mismo tipo que el destino, excepto que se quita el primer tipo de parámetro, si corresponde al resultado del combinador.
(Tenga en cuenta que #dropArguments(MethodHandle,int,List) dropArguments
se puede usar para quitar los argumentos que el combinador o el destino no desea recibir. Si algunos de los argumentos entrantes están destinados solo para el combinador, considere la posibilidad de usar MethodHandle#asCollector asCollector
en su lugar, ya que esos argumentos no tendrán que estar activos en la pila en la entrada al destino).
<b>Ejemplo:</b><blockquote>
{@code
import static java.lang.invoke.MethodHandles.*;
import static java.lang.invoke.MethodType.*;
...
MethodHandle trace = publicLookup().findVirtual(java.io.PrintStream.class,
"println", methodType(void.class, String.class))
.bindTo(System.out);
MethodHandle cat = lookup().findVirtual(String.class,
"concat", methodType(String.class, String.class));
assertEquals("boojum", (String) cat.invokeExact("boo", "jum"));
MethodHandle catTrace = foldArguments(cat, trace);
// also prints "boo":
assertEquals("boojum", (String) catTrace.invokeExact("boo", "jum"));
}
</blockquote>
Este es el pseudocódigo para el adaptador resultante. En el código, T
representa el tipo de resultado del target
adaptador resultante y . V
/v
representa el tipo y el valor del parámetro y el argumento de target
que precede a la posición de plegado; V
también es el tipo de resultado de combiner
. A
/a
denota los tipos y valores de los N
parámetros y argumentos en la posición de plegado. B
/b
representa los tipos y valores de los target
parámetros y argumentos que siguen los parámetros y argumentos plegados. <blockquote>
{@code
// there are N arguments in A...
T target(V, A[N]..., B...);
V combiner(A...);
T adapter(A... a, B... b) {
V v = combiner(a...);
return target(v, a..., b...);
}
// and if the combiner has a void return:
T target2(A[N]..., B...);
void combiner2(A...);
T adapter2(A... a, B... b) {
combiner2(a...);
return target2(a..., b...);
}
}
</blockquote>
<em>Note:</em> El adaptador resultante nunca es un identificador de método MethodHandle#asVarargsCollector variable-arity, incluso si el identificador del método de destino original era.
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.