Compartir a través de


MethodHandle.AsCollector Método

Definición

Sobrecargas

AsCollector(Class, Int32)

Convierte un <identificador de método em>array-collecting</em> , que acepta un número determinado de argumentos posicionales finales y los recopila en un argumento de matriz.

AsCollector(Int32, Class, Int32)

Convierte un <identificador de método em>array-collecting</em> , que acepta un número determinado de argumentos posicionales a partir de una posición determinada y los recopila en un argumento de matriz.

AsCollector(Class, Int32)

Convierte un <identificador de método em>array-collecting</em> , que acepta un número determinado de argumentos posicionales finales y los recopila en un argumento de matriz.

[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

Parámetros

arrayType
Class

a menudo Object[], el tipo del argumento de matriz que recopilará los argumentos.

arrayLength
Int32

el número de argumentos que se van a recopilar en un nuevo argumento de matriz

Devoluciones

un nuevo identificador de método que recopila algún argumento final en una matriz, antes de llamar al identificador del método original.

Atributos

Comentarios

Convierte un <identificador de método em>array-collecting</em> , que acepta un número determinado de argumentos posicionales finales y los recopila en un argumento de matriz. El nuevo identificador de método se adapta, como su destino, el identificador del método actual. El tipo del adaptador será el mismo que el tipo del destino, excepto que un único parámetro final (normalmente de tipo arrayType) se reemplaza por arrayLength parámetros cuyo tipo es el tipo de elemento de arrayType.

Si el tipo de matriz difiere del tipo de argumento final en el destino original, el destino original se adapta para tomar el tipo de matriz directamente, como si se llamara a #asType asType.

Cuando se llama a , el adaptador reemplaza sus argumentos finales arrayLength por una nueva matriz de tipo arrayType, cuyos elementos componen (en orden) los argumentos reemplazados. Por último, se llama al destino. El adaptador devuelve lo que el destino devuelve sin cambios.

(La matriz también puede ser una constante compartida cuando arrayLength es cero).

(<em>Note:</em> Es arrayType a menudo idéntico al último tipo de parámetro del destino original. Es un argumento explícito para la simetría con asSpreader, y también para permitir que el destino use un sencillo Object como su último tipo de parámetro).

Para crear un adaptador de recopilación que no esté restringido a un número determinado de argumentos recopilados, use #asVarargsCollector asVarargsCollector en su lugar.

Estos son algunos ejemplos de identificadores de método de recopilación de matrices: <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>

Documentación de Java para java.lang.invoke.MethodHandle.asCollector(java.lang.Class<?>, int).

Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el proyecto de código abierto de Android y se usan según los términos descritos en la licencia de atribución de Creative Commons 2.5.

Se aplica a

AsCollector(Int32, Class, Int32)

Convierte un <identificador de método em>array-collecting</em> , que acepta un número determinado de argumentos posicionales a partir de una posición determinada y los recopila en un argumento de matriz.

[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

Parámetros

collectArgPos
Int32

posición de base cero en la lista de parámetros en la que se va a empezar a recopilar.

arrayType
Class

a menudo Object[], el tipo del argumento de matriz que recopilará los argumentos.

arrayLength
Int32

el número de argumentos que se van a recopilar en un nuevo argumento de matriz

Devoluciones

un nuevo identificador de método que recopila algunos argumentos en una matriz, antes de llamar al identificador de método original.

Atributos

Comentarios

Convierte un <identificador de método em>array-collecting</em> , que acepta un número determinado de argumentos posicionales a partir de una posición determinada y los recopila en un argumento de matriz. El nuevo identificador de método se adapta, como su destino, el identificador del método actual. El tipo del adaptador será el mismo que el tipo del destino, excepto que el parámetro en la posición indicada por collectArgPos (normalmente de tipo arrayType) se reemplaza por arrayLength parámetros cuyo tipo es el tipo de elemento de arrayType.

Este método se comporta muy similar #asCollector(Class, int)a , pero difiere en que su collectArgPos argumento indica en qué posición se deben recopilar los argumentos de lista de parámetros. Este índice está basado en cero.

Agregado en 9.

Documentación de Java para java.lang.invoke.MethodHandle.asCollector(int, java.lang.Class<?>, int).

Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el proyecto de código abierto de Android y se usan según los términos descritos en la licencia de atribución de Creative Commons 2.5.

Se aplica a