MethodHandles.FoldArguments Método

Definição

Sobrecargas

Nome Description
FoldArguments(MethodHandle, Int32, MethodHandle)

Adapta um identificador de método de destino pré-processando alguns de seus argumentos, começando em uma determinada posição e chamando o destino com o resultado do pré-processamento, inserido na sequência original de argumentos pouco antes dos argumentos dobrados.

FoldArguments(MethodHandle, MethodHandle)

Adapta um identificador de método de destino pré-processando alguns de seus argumentos e, em seguida, chamando o destino com o resultado do pré-processamento, inserido na sequência original de argumentos.

FoldArguments(MethodHandle, Int32, MethodHandle)

Adapta um identificador de método de destino pré-processando alguns de seus argumentos, começando em uma determinada posição e chamando o destino com o resultado do pré-processamento, inserido na sequência original de argumentos pouco antes dos argumentos dobrados.

[Android.Runtime.Register("foldArguments", "(Ljava/lang/invoke/MethodHandle;ILjava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)]
public static Java.Lang.Invoke.MethodHandle? FoldArguments(Java.Lang.Invoke.MethodHandle? target, int pos, Java.Lang.Invoke.MethodHandle? combiner);
[<Android.Runtime.Register("foldArguments", "(Ljava/lang/invoke/MethodHandle;ILjava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)>]
static member FoldArguments : Java.Lang.Invoke.MethodHandle * int * Java.Lang.Invoke.MethodHandle -> Java.Lang.Invoke.MethodHandle

Parâmetros

target
MethodHandle

o identificador do método a ser invocado depois que os argumentos são combinados

pos
Int32

a posição na qual iniciar a dobra e na qual inserir o resultado da dobra; se isso for 0, o efeito será o mesmo que para #foldArguments(MethodHandle, MethodHandle).

combiner
MethodHandle

identificador de método para chamar inicialmente nos argumentos de entrada

Retornos

identificador de método que incorpora a lógica de dobragem de argumento especificada

Atributos

Comentários

Adapta um identificador de método de destino pré-processando alguns de seus argumentos, começando em uma determinada posição e chamando o destino com o resultado do pré-processamento, inserido na sequência original de argumentos pouco antes dos argumentos dobrados.

Esse método está intimamente relacionado, #foldArguments(MethodHandle, MethodHandle)mas permite controlar a posição na lista de parâmetros na qual a dobra ocorre. O argumento que controla isso posé um índice baseado em zero. O método #foldArguments(MethodHandle, MethodHandle) mencionado acima pressupõe a posição 0.

Adicionado em 9.

Documentação Java para java.lang.invoke.MethodHandles.foldArguments(java.lang.invoke.MethodHandle, int, java.lang.invoke.MethodHandle).

Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Android Open Source Project e usadas de acordo com os termos descritos na Licença de Atribuição Creative Commons 2.5.

Aplica-se a

FoldArguments(MethodHandle, MethodHandle)

Adapta um identificador de método de destino pré-processando alguns de seus argumentos e, em seguida, chamando o destino com o resultado do pré-processamento, inserido na sequência original de argumentos.

[Android.Runtime.Register("foldArguments", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)]
public static Java.Lang.Invoke.MethodHandle? FoldArguments(Java.Lang.Invoke.MethodHandle? target, Java.Lang.Invoke.MethodHandle? combiner);
[<Android.Runtime.Register("foldArguments", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)>]
static member FoldArguments : Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle -> Java.Lang.Invoke.MethodHandle

Parâmetros

target
MethodHandle

o identificador do método a ser invocado depois que os argumentos são combinados

combiner
MethodHandle

identificador de método para chamar inicialmente nos argumentos de entrada

Retornos

identificador de método que incorpora a lógica de dobragem de argumento especificada

Atributos

Comentários

Adapta um identificador de método de destino pré-processando alguns de seus argumentos e, em seguida, chamando o destino com o resultado do pré-processamento, inserido na sequência original de argumentos.

O pré-processamento é executado por combinerum segundo identificador de método. Dos argumentos passados para o adaptador, os primeiros N argumentos são copiados para o combinador, que é então chamado. (Aqui, N é definido como a contagem de parâmetros do combinador.) Depois disso, o controle passa para o destino, com qualquer resultado do combinador inserido antes dos argumentos de entrada originais N .

Se o combinador retornar um valor, o primeiro tipo de parâmetro do destino deverá ser idêntico ao tipo de retorno do combinador e os próximos N tipos de parâmetro do destino deverão corresponder exatamente aos parâmetros do combinador.

Se o combinador tiver um retorno nulo, nenhum resultado será inserido e os primeiros N tipos de parâmetro do destino deverão corresponder exatamente aos parâmetros do combinador.

O adaptador resultante é o mesmo tipo que o destino, exceto que o primeiro tipo de parâmetro é descartado, se corresponder ao resultado do combinador.

(Observe que #dropArguments(MethodHandle,int,List) dropArguments pode ser usado para remover os argumentos que o combinador ou o destino não deseja receber. Se alguns dos argumentos de entrada estiverem destinados apenas ao combinador, considere usar MethodHandle#asCollector asCollector , pois esses argumentos não precisarão estar ativos na pilha na entrada para o destino.)

<b>Exemplo:</b><blockquote>

{@code
            import static java.lang.invoke.MethodHandles.*;
            import static java.lang.invoke.MethodType.*;
            ...
            MethodHandle trace = publicLookup().findVirtual(java.io.PrintStream.class,
              "println", methodType(void.class, String.class))
                .bindTo(System.out);
            MethodHandle cat = lookup().findVirtual(String.class,
              "concat", methodType(String.class, String.class));
            assertEquals("boojum", (String) cat.invokeExact("boo", "jum"));
            MethodHandle catTrace = foldArguments(cat, trace);
            // also prints "boo":
            assertEquals("boojum", (String) catTrace.invokeExact("boo", "jum"));
            }

</blockquote>

Aqui está o pseudocódigo para o adaptador resultante. No código, T representa o tipo de resultado do target adaptador resultante. V / v representa o tipo e o valor do parâmetro e do argumento que target precede a posição de dobra; V também é o tipo de resultado do combiner. A / a denota os tipos e valores dos N parâmetros e argumentos na posição de dobragem. B / b representam os tipos e valores dos target parâmetros e argumentos que seguem os parâmetros e argumentos dobrados. <blockquote>

{@code
            // there are N arguments in A...
            T target(V, A[N]..., B...);
            V combiner(A...);
            T adapter(A... a, B... b) {
              V v = combiner(a...);
              return target(v, a..., b...);
            }
            // and if the combiner has a void return:
            T target2(A[N]..., B...);
            void combiner2(A...);
            T adapter2(A... a, B... b) {
              combiner2(a...);
              return target2(a..., b...);
            }
            }

</blockquote>

<em>Observação:</em> O adaptador resultante nunca é um identificador de método methodHandle#asVarargsCollector variable-arity, mesmo se o identificador do método de destino original fosse.

Documentação Java para java.lang.invoke.MethodHandles.foldArguments(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle).

Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Android Open Source Project e usadas de acordo com os termos descritos na Licença de Atribuição Creative Commons 2.5.

Aplica-se a