Linguaggio

MethodHandles.SpreadInvoker(MethodType, Int32) Metodo

Definizione

Produce un handle di metodo che richiamerà qualsiasi handle di metodo dell'oggetto specificato type, con un determinato numero di argomenti finali sostituiti da una singola matrice finale Object[] .

[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

Parametri

type
MethodType

il tipo di destinazione desiderato

leadingArgCount
Int32

numero di argomenti fissi da passare invariati alla destinazione

Valori restituiti

handle di metodo adatto per richiamare qualsiasi handle di metodo del tipo specificato

Attributi

Commenti

Produce un handle di metodo che richiamerà qualsiasi handle di metodo dell'oggetto specificato type, con un determinato numero di argomenti finali sostituiti da una singola matrice finale Object[] . Il invoker risultante sarà un handle di metodo con gli argomenti seguenti: <ul><li>un singolo MethodHandle target <li>zero o più valori iniziali (conteggiati da leadingArgCount) <li>una Object[] matrice contenente argomenti <finali /ul>

Il invoker richiamerà la destinazione come una chiamata a MethodHandle#invoke invoke con l'oggetto indicato type. Ovvero, se la destinazione è esattamente dell'oggetto specificato type, si comporterà come invokeExact; in caso contrario, si comporta come se MethodHandle#asType asType fosse usata per convertire la destinazione nell'oggetto richiesto type.

Il tipo del invoker restituito non sarà quello specificato type, ma avrà tutti i parametri tranne il primo leadingArgCount sostituito da una singola matrice di tipo Object[], che sarà il parametro finale.

Prima di richiamare la destinazione, il invoker distribuirà la matrice finale, applicherà cast di riferimento in base alle esigenze e unbox e argomenti primitivi di tipo unbox e widen. Se, quando viene chiamato il invoker, l'argomento matrice fornito non dispone del numero corretto di elementi, l'invoker genererà un'eccezione IllegalArgumentException anziché richiamare la destinazione.

Questo metodo equivale al codice seguente (anche se può essere più efficiente): <blockquote>

{@code
            MethodHandle invoker = MethodHandles.invoker(type);
            int spreadArgCount = type.parameterCount() - leadingArgCount;
            invoker = invoker.asSpreader(Object[].class, spreadArgCount);
            return invoker;
            }

</blockquote> Questo metodo non genera eccezioni riflettenti o di sicurezza.

Documentazione java per java.lang.invoke.MethodHandles.spreadInvoker(java.lang.invoke.MethodType, int).

Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal progetto Open Source Android e usato in base ai termini descritti nella licenza Creative Commons 2.5 Attribuzione.

Si applica a