Partager via


MethodHandles.CatchException(MethodHandle, Class, MethodHandle) Méthode

Définition

Crée un handle de méthode qui adapte un handle de méthode cible, en l’exécutant à l’intérieur d’un gestionnaire d’exceptions.

[Android.Runtime.Register("catchException", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/Class;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)]
public static Java.Lang.Invoke.MethodHandle? CatchException (Java.Lang.Invoke.MethodHandle? target, Java.Lang.Class? exType, Java.Lang.Invoke.MethodHandle? handler);
[<Android.Runtime.Register("catchException", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/Class;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)>]
static member CatchException : Java.Lang.Invoke.MethodHandle * Java.Lang.Class * Java.Lang.Invoke.MethodHandle -> Java.Lang.Invoke.MethodHandle

Paramètres

target
MethodHandle

handle de méthode à appeler

exType
Class

type d’exception intercepté par le gestionnaire

handler
MethodHandle

handle de méthode à appeler si une exception correspondante est levée

Retours

handle de méthode qui incorpore la logique try/catch spécifiée

Attributs

Remarques

Crée un handle de méthode qui adapte un handle de méthode cible, en l’exécutant à l’intérieur d’un gestionnaire d’exceptions. Si la cible retourne normalement, l’adaptateur retourne cette valeur. Si une exception correspondant au type spécifié est levée, le handle de secours est appelé à la place sur l’exception, ainsi que les arguments d’origine.

La cible et le gestionnaire doivent avoir les mêmes types d’argument et de retour correspondants, sauf que le gestionnaire peut omettre les arguments de fin (de la même façon que le prédicat dans #guardWithTest guardWithTest). En outre, le gestionnaire doit avoir un paramètre de début supplémentaire ou exType un supertype.

Voici un pseudocode pour l’adaptateur résultant. Dans le code, T représente le type de retour du targethandleret , et correspondant à celui de l’adaptateur résultant ; A/a, les types et valeurs d’arguments du handle résultant consommé par handler; et/Bb , ceux des arguments au handle résultant ignoré par .handler <blockquote>

{@code
            T target(A..., B...);
            T handler(ExType, A...);
            T adapter(A... a, B... b) {
              try {
                return target(a..., b...);
              } catch (ExType ex) {
                return handler(ex, a...);
              }
            }
            }

</blockquote> Notez que les arguments enregistrés (a... dans le pseudocode) ne peuvent pas être modifiés par l’exécution de la cible, et sont donc passés inchangés de l’appelant au gestionnaire, si le gestionnaire est appelé.

La cible et le gestionnaire doivent retourner le même type, même si le gestionnaire lève toujours. (Cela peut se produire, par exemple, car le gestionnaire simule une finally clause). Pour créer un tel gestionnaire de levée, composez la logique de création du gestionnaire avec #throwException throwException, afin de créer un handle de méthode du type de retour correct.

Documentation Java pour java.lang.invoke.MethodHandles.catchException(java.lang.invoke.MethodHandle, java.lang.Class<? extends java.lang.Throwable>, java.lang.invoke.MethodHandle).

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

S’applique à