MethodHandle.AsCollector Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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.