Compartilhar via


MethodHandles.FoldArguments Método

Definição

Sobrecargas

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, em seguida, chamando o destino com o resultado do pré-processamento, inserido na sequência original de argumentos imediatamente 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, em seguida, chamando o destino com o resultado do pré-processamento, inserido na sequência original de argumentos imediatamente 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 de método para invocar depois que os argumentos são combinados

pos
Int32

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

combiner
MethodHandle

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

Retornos

identificador de método que incorpora a lógica de dobramento 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, em seguida, chamando o destino com o resultado do pré-processamento, inserido na sequência original de argumentos imediatamente antes dos argumentos dobrados.

Este método está intimamente relacionado com #foldArguments(MethodHandle, MethodHandle), mas permite controlar a posição na lista de parâmetros em que o dobramento ocorre. O argumento que controla isso, pos, é um índice baseado em zero. O método #foldArguments(MethodHandle, MethodHandle) acima mencionado assume 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 usado de acordo com os termos descritos na Creative Commons 2.5 Attribution License.

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 de método para invocar depois que os argumentos são combinados

combiner
MethodHandle

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

Retornos

identificador de método que incorpora a lógica de dobramento 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 é realizado pelo combiner, um 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 void, nenhum resultado será inserido, e os primeiros N tipos de parâmetro do destino devem corresponder exatamente aos parâmetros do combinador.

O adaptador resultante é do 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 quaisquer argumentos que o combinador ou o destino não deseja receber. Se alguns dos argumentos de entrada forem destinados apenas ao combinador, considere usar MethodHandle#asCollector asCollector em vez disso, já que 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 e resultante. V/vrepresentam o tipo e o valor do parâmetro e do argumento que precede a posição de target dobramento; Vcombiner A/a denotam os tipos e valores dos N parâmetros e argumentos na posição de dobramento. 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>Nota:</em> O adaptador resultante nunca é um identificador de método de aridade variável MethodHandle#asVarargsCollector, mesmo que o identificador de 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 usado de acordo com os termos descritos na Creative Commons 2.5 Attribution License.

Aplica-se a