MethodHandles.SpreadInvoker(MethodType, Int32) Método

Definição

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.

Documentação Java para java.lang.invoke.MethodHandles.spreadInvoker(java.lang.invoke.MethodType, int).

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