Langage

MethodHandles.SpreadInvoker(MethodType, Int32) Méthode

Définition

Produit un handle de méthode qui appelle n’importe quel handle de méthode de l’argument donné type, avec un nombre donné d’arguments de fin remplacés par un tableau de Object[] fin unique.

[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

Paramètres

type
MethodType

type cible souhaité

leadingArgCount
Int32

nombre d’arguments fixes, à passer inchangés à la cible

Retours

un handle de méthode adapté à l’appel d’un handle de méthode du type donné

Attributs

Remarques

Produit un handle de méthode qui appelle n’importe quel handle de méthode de l’argument donné type, avec un nombre donné d’arguments de fin remplacés par un tableau de Object[] fin unique. L’appelant résultant sera un handle de méthode avec les arguments suivants : <ul><li>une seule MethodHandle cible <li>zéro ou plus de valeurs de début (comptées par leadingArgCount) <li>un Object[] tableau contenant des arguments <de fin /ul>

L’appelant appellera sa cible comme un appel avec MethodHandle#invoke invoke l’appelant indiqué type. Autrement dit, si la cible est exactement de l’élément donné type, elle se comporte comme invokeExactsi elle se comporte comme si MethodHandle#asType asType elle était utilisée pour convertir la cible en la cible requise type.

Le type de l’appelant retourné ne sera pas le donné type, mais aura plutôt tous les paramètres, sauf le premier leadingArgCount remplacé par un seul tableau de type Object[], qui sera le paramètre final.

Avant d’appeler sa cible, l’appelant répartit le tableau final, applique les casts de référence si nécessaire, et désactive les arguments primitifs et larges. Si, lorsque l’appelant est appelé, l’argument de tableau fourni n’a pas le nombre correct d’éléments, l’appelant lève un IllegalArgumentException appel au lieu d’appeler la cible.

Cette méthode équivaut au code suivant (bien qu’elle soit plus efficace) : <blockquote>

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

</blockquote> Cette méthode ne lève aucune exception de réflexion ou de sécurité.

Java documentation pour java.lang.invoke.MethodHandles.spreadInvoker(java.lang.invoke.MethodType, int).

Les parties de cette page sont des modifications basées sur le travail créé et partagé par Android Open Source et utilisées en fonction des termes décrits dans la Creative Commons 2.5 Attribution License.

S’applique à