Partager via


MethodHandle.AsCollector Méthode

Définition

Surcharges

AsCollector(Class, Int32)

Crée un <>handle de méthode em array-collecting</em>, qui accepte un nombre donné d’arguments positionnels de fin et les collecte dans un argument de tableau.

AsCollector(Int32, Class, Int32)

Rend un <>handle de méthode de< collecte de tableau/em em>, qui accepte un nombre donné d’arguments positionnels commençant à une position donnée et les collecte dans un argument de tableau.

AsCollector(Class, Int32)

Crée un <>handle de méthode em array-collecting</em>, qui accepte un nombre donné d’arguments positionnels de fin et les collecte dans un argument de tableau.

[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

Paramètres

arrayType
Class

souvent Object[], le type de l’argument de tableau qui collecte les arguments

arrayLength
Int32

nombre d’arguments à collecter dans un nouvel argument de tableau

Retours

un nouveau handle de méthode qui collecte un argument de fin dans un tableau, avant d’appeler le handle de méthode d’origine

Attributs

Remarques

Crée un <>handle de méthode em array-collecting</em>, qui accepte un nombre donné d’arguments positionnels de fin et les collecte dans un argument de tableau. Le nouveau handle de méthode s’adapte, en tant que cible, à la poignée de méthode actuelle. Le type de l’adaptateur est identique au type de la cible, sauf qu’un seul paramètre de fin (généralement de type arrayType) est remplacé par arrayLength des paramètres dont le type est le type d’élément de arrayType.

Si le type de tableau diffère du type d’argument final sur la cible d’origine, la cible d’origine est adaptée pour prendre directement le type de tableau, comme par un appel à #asType asType.

Lorsqu’il est appelé, l’adaptateur remplace ses arguments de fin arrayLength par un seul nouveau tableau de type arrayType, dont les éléments comprennent (dans l’ordre) les arguments remplacés. Enfin, la cible est appelée. Ce que la cible retourne finalement est retourné inchangé par l’adaptateur.

(Le tableau peut également être une constante partagée lorsqu’elle arrayLength est égale à zéro.)

(<em>Remarque :</em> Le arrayType paramètre est souvent identique au dernier type de paramètre de la cible d’origine. Il s’agit d’un argument explicite pour la symétrie avec asSpreader, et également pour permettre à la cible d’utiliser un simple Object comme dernier type de paramètre.)

Pour créer un adaptateur de collecte qui n’est pas limité à un nombre particulier d’arguments collectés, utilisez #asVarargsCollector asVarargsCollector à la place.

Voici quelques exemples de handles de méthode de collecte de tableaux : <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>

Documentation Java pour java.lang.invoke.MethodHandle.asCollector(java.lang.Class<?>, int).

Les parties de cette page sont des modifications basées sur le travail créé et partagé par le projet Android Open Source et utilisés en fonction des termes décrits dans la licence d’attribution Creative Commons 2.5.

S’applique à

AsCollector(Int32, Class, Int32)

Rend un <>handle de méthode de< collecte de tableau/em em>, qui accepte un nombre donné d’arguments positionnels commençant à une position donnée et les collecte dans un argument de tableau.

[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

Paramètres

collectArgPos
Int32

position de base zéro dans la liste de paramètres à laquelle commencer la collecte.

arrayType
Class

souvent Object[], le type de l’argument de tableau qui collecte les arguments

arrayLength
Int32

nombre d’arguments à collecter dans un nouvel argument de tableau

Retours

un nouveau handle de méthode qui collecte certains arguments dans un tableau, avant d’appeler le handle de méthode d’origine

Attributs

Remarques

Rend un <>handle de méthode de< collecte de tableau/em em>, qui accepte un nombre donné d’arguments positionnels commençant à une position donnée et les collecte dans un argument de tableau. Le nouveau handle de méthode s’adapte, en tant que cible, à la poignée de méthode actuelle. Le type de l’adaptateur sera identique au type de la cible, sauf que le paramètre à la position indiquée par (généralement de typearrayType) est remplacé par collectArgPosarrayLength les paramètres dont le type est le type d’élément .arrayType

Cette méthode se comporte très bien comme #asCollector(Class, int), mais diffère de ce que son collectArgPos argument indique à quelle position dans les arguments de liste de paramètres doit être collectée. Cet index est de base zéro.

Ajouté dans 9.

Documentation Java pour java.lang.invoke.MethodHandle.asCollector(int, java.lang.Class<?>, int).

Les parties de cette page sont des modifications basées sur le travail créé et partagé par le projet Android Open Source et utilisés en fonction des termes décrits dans la licence d’attribution Creative Commons 2.5.

S’applique à