MethodHandle.AsCollector 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
AsCollector(Class, Int32) |
Crea un <handle di metodo em>array-collect</em> , che accetta un determinato numero di argomenti posizionali finali e li raccoglie in un argomento di matrice. |
AsCollector(Int32, Class, Int32) |
Crea un <handle di metodo em>array-collect</em> , che accetta un determinato numero di argomenti posizionali a partire da una determinata posizione e li raccoglie in un argomento di matrice. |
AsCollector(Class, Int32)
Crea un <handle di metodo em>array-collect</em> , che accetta un determinato numero di argomenti posizionali finali e li raccoglie in un argomento di matrice.
[Android.Runtime.Register("asCollector", "(Ljava/lang/Class;I)Ljava/lang/invoke/MethodHandle;", "GetAsCollector_Ljava_lang_Class_IHandler", ApiSince=26)]
public virtual Java.Lang.Invoke.MethodHandle? AsCollector (Java.Lang.Class? arrayType, int arrayLength);
[<Android.Runtime.Register("asCollector", "(Ljava/lang/Class;I)Ljava/lang/invoke/MethodHandle;", "GetAsCollector_Ljava_lang_Class_IHandler", ApiSince=26)>]
abstract member AsCollector : Java.Lang.Class * int -> Java.Lang.Invoke.MethodHandle
override this.AsCollector : Java.Lang.Class * int -> Java.Lang.Invoke.MethodHandle
Parametri
- arrayType
- Class
spesso Object[]
, il tipo dell'argomento matrice che raccoglierà gli argomenti
- arrayLength
- Int32
numero di argomenti da raccogliere in un nuovo argomento di matrice
Restituisce
un nuovo handle di metodo che raccoglie un argomento finale in una matrice, prima di chiamare l'handle del metodo originale
- Attributi
Commenti
Crea un <handle di metodo em>array-collect</em> , che accetta un determinato numero di argomenti posizionali finali e li raccoglie in un argomento di matrice. Il nuovo handle del metodo si adatta, come destinazione, all'handle del metodo corrente. Il tipo dell'adattatore sarà uguale al tipo della destinazione, ad eccezione del fatto che un singolo parametro finale (in genere di tipo arrayType
) viene sostituito da arrayLength
parametri il cui tipo è il tipo di elemento .arrayType
Se il tipo di matrice è diverso dal tipo di argomento finale nella destinazione originale, la destinazione originale viene adattata per accettare direttamente il tipo di matrice, come se fosse una chiamata a #asType asType
.
Quando viene chiamato, l'adattatore sostituisce i relativi argomenti finali arrayLength
con una singola nuova matrice di tipo arrayType
, i cui elementi comprendono (in ordine) gli argomenti sostituiti. Viene infine chiamata la destinazione. Il risultato restituito alla fine dalla destinazione viene restituito invariato dall'adattatore.
La matrice può anche essere una costante condivisa quando arrayLength
è zero.
(<em>Nota:</em> L'è arrayType
spesso identico all'ultimo tipo di parametro della destinazione originale. Si tratta di un argomento esplicito per la simmetria con asSpreader
e anche per consentire alla destinazione di usare un semplice Object
come ultimo tipo di parametro.
Per creare un adattatore di raccolta che non è limitato a un determinato numero di argomenti raccolti, utilizzare #asVarargsCollector asVarargsCollector
invece .
Ecco alcuni esempi di handle di metodo di raccolta di matrici: <blockquote>
{@code
MethodHandle deepToString = publicLookup()
.findStatic(Arrays.class, "deepToString", methodType(String.class, Object[].class));
assertEquals("[won]", (String) deepToString.invokeExact(new Object[]{"won"}));
MethodHandle ts1 = deepToString.asCollector(Object[].class, 1);
assertEquals(methodType(String.class, Object.class), ts1.type());
//assertEquals("[won]", (String) ts1.invokeExact( new Object[]{"won"})); //FAIL
assertEquals("[[won]]", (String) ts1.invokeExact((Object) new Object[]{"won"}));
// arrayType can be a subtype of Object[]
MethodHandle ts2 = deepToString.asCollector(String[].class, 2);
assertEquals(methodType(String.class, String.class, String.class), ts2.type());
assertEquals("[two, too]", (String) ts2.invokeExact("two", "too"));
MethodHandle ts0 = deepToString.asCollector(Object[].class, 0);
assertEquals("[]", (String) ts0.invokeExact());
// collectors can be nested, Lisp-style
MethodHandle ts22 = deepToString.asCollector(Object[].class, 3).asCollector(String[].class, 2);
assertEquals("[A, B, [C, D]]", ((String) ts22.invokeExact((Object)'A', (Object)"B", "C", "D")));
// arrayType can be any primitive array type
MethodHandle bytesToString = publicLookup()
.findStatic(Arrays.class, "toString", methodType(String.class, byte[].class))
.asCollector(byte[].class, 3);
assertEquals("[1, 2, 3]", (String) bytesToString.invokeExact((byte)1, (byte)2, (byte)3));
MethodHandle longsToString = publicLookup()
.findStatic(Arrays.class, "toString", methodType(String.class, long[].class))
.asCollector(long[].class, 1);
assertEquals("[123]", (String) longsToString.invokeExact((long)123));
}
</blockquote>
Documentazione java per java.lang.invoke.MethodHandle.asCollector(java.lang.Class<?>, int)
.
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
AsCollector(Int32, Class, Int32)
Crea un <handle di metodo em>array-collect</em> , che accetta un determinato numero di argomenti posizionali a partire da una determinata posizione e li raccoglie in un argomento di matrice.
[Android.Runtime.Register("asCollector", "(ILjava/lang/Class;I)Ljava/lang/invoke/MethodHandle;", "GetAsCollector_ILjava_lang_Class_IHandler", ApiSince=33)]
public virtual Java.Lang.Invoke.MethodHandle? AsCollector (int collectArgPos, Java.Lang.Class? arrayType, int arrayLength);
[<Android.Runtime.Register("asCollector", "(ILjava/lang/Class;I)Ljava/lang/invoke/MethodHandle;", "GetAsCollector_ILjava_lang_Class_IHandler", ApiSince=33)>]
abstract member AsCollector : int * Java.Lang.Class * int -> Java.Lang.Invoke.MethodHandle
override this.AsCollector : int * Java.Lang.Class * int -> Java.Lang.Invoke.MethodHandle
Parametri
- collectArgPos
- Int32
posizione in base zero nell'elenco di parametri in corrispondenza del quale iniziare la raccolta.
- arrayType
- Class
spesso Object[]
, il tipo dell'argomento matrice che raccoglierà gli argomenti
- arrayLength
- Int32
numero di argomenti da raccogliere in un nuovo argomento di matrice
Restituisce
un nuovo handle di metodo che raccoglie alcuni argomenti in una matrice, prima di chiamare l'handle del metodo originale
- Attributi
Commenti
Crea un <handle di metodo em>array-collect</em> , che accetta un determinato numero di argomenti posizionali a partire da una determinata posizione e li raccoglie in un argomento di matrice. Il nuovo handle del metodo si adatta, come destinazione, all'handle del metodo corrente. Il tipo dell'adattatore sarà uguale al tipo della destinazione, ad eccezione del fatto che il parametro in corrispondenza della posizione indicata da collectArgPos
(in genere di tipo arrayType
) viene sostituito da arrayLength
parametri il cui tipo è il tipo di elemento di arrayType
.
Questo metodo si comporta in modo molto simile #asCollector(Class, int)
a , ma differisce dal fatto che il relativo collectArgPos
argomento indica in quale posizione negli argomenti dell'elenco di parametri deve essere raccolto. Questo indice è in base zero.
Aggiunta in 9.
Documentazione java per java.lang.invoke.MethodHandle.asCollector(int, java.lang.Class<?>, int)
.
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.