Condividi tramite


MethodHandle.AsCollector Metodo

Definizione

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 asSpreadere 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.

Si applica a