MethodHandles.FoldArguments Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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.
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.
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.