Freigeben über


MethodHandles.FoldArguments Methode

Definition

Überlädt

FoldArguments(MethodHandle, Int32, MethodHandle)

Passt ein Zielmethodenhandle an, indem einige seiner Argumente vorverarbeitet werden, beginnend an einer bestimmten Position, und anschließend wird das Ziel mit dem Ergebnis der Vorverarbeitung aufgerufen, das in die ursprüngliche Abfolge von Argumenten direkt vor den gefalteten Argumenten eingefügt wird.

FoldArguments(MethodHandle, MethodHandle)

Passt ein Zielmethodenhandle an, indem einige seiner Argumente vorab verarbeitet werden, und anschließend wird das Ziel mit dem Ergebnis der Vorverarbeitung aufgerufen, das in die ursprüngliche Abfolge von Argumenten eingefügt wurde.

FoldArguments(MethodHandle, Int32, MethodHandle)

Passt ein Zielmethodenhandle an, indem einige seiner Argumente vorverarbeitet werden, beginnend an einer bestimmten Position, und anschließend wird das Ziel mit dem Ergebnis der Vorverarbeitung aufgerufen, das in die ursprüngliche Abfolge von Argumenten direkt vor den gefalteten Argumenten eingefügt wird.

[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

Parameter

target
MethodHandle

das Methodenhandle, das aufgerufen werden soll, nachdem Argumente kombiniert wurden

pos
Int32

die Position, an der gefaltet werden soll und an der das Faltergebnis eingefügt werden soll; wenn dies der Fall ist0, ist der Effekt identisch mit .#foldArguments(MethodHandle, MethodHandle)

combiner
MethodHandle

Methodenhandle zum anfänglichen Aufrufen der eingehenden Argumente

Gibt zurück

Methodenhandle, das die angegebene Argumentfaltungslogik enthält

Attribute

Hinweise

Passt ein Zielmethodenhandle an, indem einige seiner Argumente vorverarbeitet werden, beginnend an einer bestimmten Position, und anschließend wird das Ziel mit dem Ergebnis der Vorverarbeitung aufgerufen, das in die ursprüngliche Abfolge von Argumenten direkt vor den gefalteten Argumenten eingefügt wird.

Diese Methode ist eng mit dieser Methode verknüpft #foldArguments(MethodHandle, MethodHandle), ermöglicht jedoch die Steuerung der Position in der Parameterliste, an der die Faltung stattfindet. Das Argument, das dies steuert, posist ein nullbasierter Index. Die oben genannte Methode #foldArguments(MethodHandle, MethodHandle) geht von Position 0 aus.

Hinzugefügt in 9.

Java-Dokumentation für java.lang.invoke.MethodHandles.foldArguments(java.lang.invoke.MethodHandle, int, java.lang.invoke.MethodHandle).

Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die vom Android Open Source-Projekt erstellt und freigegeben werden und gemäß den in der Creative Commons 2.5 Attribution License beschriebenen Begriffen verwendet werden.

Gilt für:

FoldArguments(MethodHandle, MethodHandle)

Passt ein Zielmethodenhandle an, indem einige seiner Argumente vorab verarbeitet werden, und anschließend wird das Ziel mit dem Ergebnis der Vorverarbeitung aufgerufen, das in die ursprüngliche Abfolge von Argumenten eingefügt wurde.

[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

Parameter

target
MethodHandle

das Methodenhandle, das aufgerufen werden soll, nachdem Argumente kombiniert wurden

combiner
MethodHandle

Methodenhandle zum anfänglichen Aufrufen der eingehenden Argumente

Gibt zurück

Methodenhandle, das die angegebene Argumentfaltungslogik enthält

Attribute

Hinweise

Passt ein Zielmethodenhandle an, indem einige seiner Argumente vorab verarbeitet werden, und anschließend wird das Ziel mit dem Ergebnis der Vorverarbeitung aufgerufen, das in die ursprüngliche Abfolge von Argumenten eingefügt wurde.

Die Vorverarbeitung erfolgt durch combinerein zweites Methodenhandle. Von den Argumenten, die an den Adapter übergeben werden, werden die ersten N Argumente in den Combiner kopiert, der dann aufgerufen wird. (Hier N wird die Parameteranzahl des Combiners definiert.) Danach wird das Steuerelement an das Ziel übergeben, wobei jedes Ergebnis des Kombinationsgebers vor den ursprünglichen eingehenden N Argumenten eingefügt wurde.

Wenn der Combiner einen Wert zurückgibt, muss der erste Parametertyp des Ziels mit dem Rückgabetyp des Combiners identisch sein, und die nächsten N Parametertypen des Ziels müssen exakt mit den Parametern des Combiners übereinstimmen.

Wenn der Combiner über eine ungültige Rückgabe verfügt, wird kein Ergebnis eingefügt, und die ersten N Parametertypen des Ziels müssen exakt mit den Parametern des Combiners übereinstimmen.

Der resultierende Adapter ist derselbe Typ wie das Ziel, mit der Ausnahme, dass der erste Parametertyp gelöscht wird, wenn er dem Ergebnis des Combiners entspricht.

(Beachten Sie, dass #dropArguments(MethodHandle,int,List) dropArguments sie zum Entfernen von Argumenten verwendet werden können, die entweder vom Combiner oder vom Ziel empfangen werden sollen. Wenn einige der eingehenden Argumente nur für den Combiner bestimmt sind, sollten Sie stattdessen die Verwendung in MethodHandle#asCollector asCollector Betracht ziehen, da diese Argumente nicht im Stapel beim Eintrag zum Ziel vorhanden sein müssen.)

<b>Beispiel:</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>

Hier ist pseudocode für den resultierenden Adapter. Stellt im Code T den Ergebnistyp des target und des resultierenden Adapters dar. V/v stellt den Typ und den Wert des Parameters und Arguments target vor der Faltposition dar; V ist auch der Ergebnistyp der combiner. A/a die Typen und Werte der N Parameter und Argumente an der Faltposition angeben. B/b stellt die Typen und Werte der target Parameter und Argumente dar, die den gefalteten Parametern und Argumenten entsprechen. <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>Hinweis:</em> Der resultierende Adapter ist nie ein MethodHandle#asVarargsCollector Variable-Arity-Methodenhandle, auch wenn der ursprüngliche Zielmethodenhandle war.

Java-Dokumentation für java.lang.invoke.MethodHandles.foldArguments(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle).

Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die vom Android Open Source-Projekt erstellt und freigegeben werden und gemäß den in der Creative Commons 2.5 Attribution License beschriebenen Begriffen verwendet werden.

Gilt für: