MethodHandles.FoldArguments 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
| 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.
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.
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.