MethodHandles.SpreadInvoker(MethodType, Int32) 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.
Produz um identificador de método que invocará qualquer identificador de método do determinado type, com um determinado número de argumentos à direita substituídos por uma única matriz à Object[] direita.
[Android.Runtime.Register("spreadInvoker", "(Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)]
public static Java.Lang.Invoke.MethodHandle? SpreadInvoker(Java.Lang.Invoke.MethodType? type, int leadingArgCount);
[<Android.Runtime.Register("spreadInvoker", "(Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)>]
static member SpreadInvoker : Java.Lang.Invoke.MethodType * int -> Java.Lang.Invoke.MethodHandle
Parâmetros
- type
- MethodType
o tipo de destino desejado
- leadingArgCount
- Int32
número de argumentos fixos, a serem passados inalterados para o destino
Retornos
um identificador de método adequado para invocar qualquer identificador de método do tipo fornecido
- Atributos
Comentários
Produz um identificador de método que invocará qualquer identificador de método do determinado type, com um determinado número de argumentos à direita substituídos por uma única matriz à Object[] direita. O invocador resultante será um identificador de método com os seguintes argumentos: <ul><li>um único MethodHandle destino <li>zero ou mais valores principais (contados por leadingArgCount) <li>uma Object[] matriz que contém argumentos <à direita /ul>
O invocador invocará seu destino como uma chamada com MethodHandle#invoke invoke o indicado type. Ou seja, se o destino for exatamente do determinado type, ele se comportará como invokeExact; caso contrário, ele se comportará como se MethodHandle#asType asType fosse usado para converter o destino no necessário type.
O tipo do invocador retornado não será o determinado type, mas terá todos os parâmetros, exceto o primeiro leadingArgCount substituído por uma única matriz de tipo Object[], que será o parâmetro final.
Antes de invocar seu destino, o invocador espalhará a matriz final, aplicará conversões de referência conforme necessário e desempilhará e ampliará os argumentos primitivos. Se, quando o invocador for chamado, o argumento de matriz fornecido não tiver o número correto de elementos, o invocador lançará um IllegalArgumentException em vez de invocar o destino.
Esse método é equivalente ao código a seguir (embora possa ser mais eficiente): <blockquote>
{@code
MethodHandle invoker = MethodHandles.invoker(type);
int spreadArgCount = type.parameterCount() - leadingArgCount;
invoker = invoker.asSpreader(Object[].class, spreadArgCount);
return invoker;
}
</blockquote> Este método não gera exceções de segurança ou reflexão.
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.