MethodHandle.AsCollector Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Sobrecargas
AsCollector(Class, Int32) |
Cria um <identificador de método em>array-collecting</em> , que aceita um determinado número de argumentos posicionais à direita e os coleta em um argumento de matriz. |
AsCollector(Int32, Class, Int32) |
Cria um <identificador de método em>array-collecting</em> , que aceita um determinado número de argumentos posicionais começando em uma determinada posição e os coleta em um argumento de matriz. |
AsCollector(Class, Int32)
Cria um <identificador de método em>array-collecting</em> , que aceita um determinado número de argumentos posicionais à direita e os coleta em um 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
muitas vezes Object[]
, o tipo do argumento de matriz que coletará os argumentos
- arrayLength
- Int32
O número de argumentos a serem coletados em um novo argumento de matriz
Retornos
um novo identificador de método que coleta algum argumento à direita em uma matriz, antes de chamar o identificador de método original
- Atributos
Comentários
Cria um <identificador de método em>array-collecting</em> , que aceita um determinado número de argumentos posicionais à direita e os coleta em um argumento de matriz. O novo identificador de método adapta, como seu destino, o identificador de método atual. O tipo do adaptador será o mesmo que o tipo do destino, exceto que um único parâmetro à direita (geralmente do tipo arrayType
) é substituído por arrayLength
parâmetros cujo tipo é o tipo de elemento do arrayType
.
Se o tipo de matriz for diferente do tipo de argumento final no destino original, o destino original será adaptado para receber o tipo de matriz diretamente, como se fosse uma chamada para #asType asType
.
Quando chamado, o adaptador substitui seus argumentos à arrayLength
direita por uma única nova matriz do tipo arrayType
, cujos elementos compreendem (em ordem) os argumentos substituídos. Por fim, o alvo é chamado. O que o destino eventualmente retorna é retornado inalterado pelo adaptador.
(A matriz também pode ser uma constante compartilhada quando arrayLength
é zero.)
(<em>Nota:</em> O arrayType
é muitas vezes idêntico ao último tipo de parâmetro do destino original. É um argumento explícito para simetria com asSpreader
, e também para permitir que o destino use um simples Object
como seu último tipo de parâmetro.)
Para criar um adaptador de coleta que não esteja restrito a um número específico de argumentos coletados, use #asVarargsCollector asVarargsCollector
em vez disso.
Aqui estão alguns exemplos de identificadores de método de coleta de matriz: <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>
Documentação Java para java.lang.invoke.MethodHandle.asCollector(java.lang.Class<?>, int)
.
Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Android Open Source Project e usado de acordo com os termos descritos na Creative Commons 2.5 Attribution License.
Aplica-se a
AsCollector(Int32, Class, Int32)
Cria um <identificador de método em>array-collecting</em> , que aceita um determinado número de argumentos posicionais começando em uma determinada posição e os coleta em um 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
A posição baseada em zero na lista de parâmetros na qual começar a coletar.
- arrayType
- Class
muitas vezes Object[]
, o tipo do argumento de matriz que coletará os argumentos
- arrayLength
- Int32
O número de argumentos a serem coletados em um novo argumento de matriz
Retornos
um novo identificador de método que coleta alguns argumentos em uma matriz, antes de chamar o identificador de método original
- Atributos
Comentários
Cria um <identificador de método em>array-collecting</em> , que aceita um determinado número de argumentos posicionais começando em uma determinada posição e os coleta em um argumento de matriz. O novo identificador de método adapta, como seu destino, o identificador de método atual. O tipo do adaptador será o mesmo que o tipo do destino, exceto que o parâmetro na posição indicada por collectArgPos
(geralmente do tipo arrayType
) é substituído por arrayLength
parâmetros cujo tipo é o tipo de elemento de arrayType
.
Esse método se comporta muito como #asCollector(Class, int)
, mas difere em que seu collectArgPos
argumento indica em qual posição na lista de parâmetros os argumentos devem ser coletados. Esse índice é baseado em zero.
Adicionado em 9.
Documentação Java para java.lang.invoke.MethodHandle.asCollector(int, java.lang.Class<?>, int)
.
Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Android Open Source Project e usado de acordo com os termos descritos na Creative Commons 2.5 Attribution License.