Condividi tramite


MethodHandles.FoldArguments Metodo

Definizione

Overload

FoldArguments(MethodHandle, Int32, MethodHandle)

Adatta un handle di metodo di destinazione pre-elaborazione di alcuni dei relativi argomenti, a partire da una determinata posizione e quindi chiamando la destinazione con il risultato della pre-elaborazione, inserita nella sequenza originale di argomenti subito prima degli argomenti piegati.

FoldArguments(MethodHandle, MethodHandle)

Adatta un handle di metodo di destinazione pre-elaborazione di alcuni dei relativi argomenti e quindi chiama la destinazione con il risultato della pre-elaborazione, inserita nella sequenza originale di argomenti.

FoldArguments(MethodHandle, Int32, MethodHandle)

Adatta un handle di metodo di destinazione pre-elaborazione di alcuni dei relativi argomenti, a partire da una determinata posizione e quindi chiamando la destinazione con il risultato della pre-elaborazione, inserita nella sequenza originale di argomenti subito prima degli argomenti piegati.

[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

Parametri

target
MethodHandle

handle del metodo da richiamare dopo che gli argomenti vengono combinati

pos
Int32

la posizione in corrispondenza della quale iniziare la piegatura e in corrispondenza della quale inserire il risultato della riduzione; se è 0, l'effetto è uguale a per #foldArguments(MethodHandle, MethodHandle).

combiner
MethodHandle

handle del metodo per chiamare inizialmente sugli argomenti in ingresso

Restituisce

handle del metodo che incorpora la logica di riduzione dell'argomento specificato

Attributi

Commenti

Adatta un handle di metodo di destinazione pre-elaborazione di alcuni dei relativi argomenti, a partire da una determinata posizione e quindi chiamando la destinazione con il risultato della pre-elaborazione, inserita nella sequenza originale di argomenti subito prima degli argomenti piegati.

Questo metodo è strettamente correlato a #foldArguments(MethodHandle, MethodHandle), ma consente di controllare la posizione nell'elenco dei parametri in corrispondenza del quale viene eseguita la riduzione. L'argomento che controlla questo oggetto, pos, è un indice in base zero. Il metodo #foldArguments(MethodHandle, MethodHandle) precedente presuppone la posizione 0.

Aggiunta in 9.

Documentazione java per java.lang.invoke.MethodHandles.foldArguments(java.lang.invoke.MethodHandle, int, java.lang.invoke.MethodHandle).

Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal progetto Open Source Android e usato in base ai termini descritti nella licenza Creative Commons 2.5 Attribuzione.

Si applica a

FoldArguments(MethodHandle, MethodHandle)

Adatta un handle di metodo di destinazione pre-elaborazione di alcuni dei relativi argomenti e quindi chiama la destinazione con il risultato della pre-elaborazione, inserita nella sequenza originale di argomenti.

[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

Parametri

target
MethodHandle

handle del metodo da richiamare dopo che gli argomenti vengono combinati

combiner
MethodHandle

handle del metodo per chiamare inizialmente sugli argomenti in ingresso

Restituisce

handle del metodo che incorpora la logica di riduzione dell'argomento specificato

Attributi

Commenti

Adatta un handle di metodo di destinazione pre-elaborazione di alcuni dei relativi argomenti e quindi chiama la destinazione con il risultato della pre-elaborazione, inserita nella sequenza originale di argomenti.

La pre-elaborazione viene eseguita da combiner, un secondo handle di metodo. Degli argomenti passati all'adapter, i primi N argomenti vengono copiati nel combinatore, che viene quindi chiamato. In questo caso, N viene definito come conteggio dei parametri del combinatore. In seguito, il controllo passa alla destinazione, con qualsiasi risultato del combinatore inserito prima degli argomenti in ingresso originali N .

Se il combinatore restituisce un valore, il primo tipo di parametro della destinazione deve essere identico al tipo restituito del combinatore e i tipi di parametro successivi N della destinazione devono corrispondere esattamente ai parametri del combinatore.

Se il combinatore ha un valore void restituito, non verrà inserito alcun risultato e i primi N tipi di parametro della destinazione devono corrispondere esattamente ai parametri del combinatore.

L'adattatore risultante è lo stesso tipo della destinazione, ad eccezione del fatto che il primo tipo di parametro viene eliminato, se corrisponde al risultato del combinatore.

Si noti che #dropArguments(MethodHandle,int,List) dropArguments è possibile usare per rimuovere tutti gli argomenti che il combinatore o la destinazione non desidera ricevere. Se alcuni degli argomenti in ingresso sono destinati solo al combinatore, prendere in considerazione l'uso MethodHandle#asCollector asCollector , poiché tali argomenti non dovranno essere presenti nello stack sulla voce di destinazione.

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

Ecco lo pseudocodice per l'adattatore risultante. Nel codice T rappresenta il tipo di risultato dell'adattatore target risultante e . V/v rappresenta il tipo e il valore del parametro e dell'argomento di target che precede la posizione di riduzione; V è anche il tipo di risultato dell'oggetto combiner. A/a denotano i tipi e i valori dei N parametri e degli argomenti nella posizione di riduzione. B/b rappresentano i tipi e i valori dei target parametri e degli argomenti che seguono i parametri e gli argomenti piegati. <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>Nota:</em> L'adattatore risultante non è mai un handle del metodo MethodHandle#asVarargsCollector variable-arity, anche se l'handle del metodo di destinazione originale era.

Documentazione java per java.lang.invoke.MethodHandles.foldArguments(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle).

Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal progetto Open Source Android e usato in base ai termini descritti nella licenza Creative Commons 2.5 Attribuzione.

Si applica a