MethodHandles.CatchException(MethodHandle, Class, MethodHandle) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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 target
handler
et , et correspondant à celui de l’adaptateur résultant ; A
/a
, les types et valeurs d’arguments du handle résultant consommé par handler
; et/B
b
, 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.
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.