Freigeben über


MethodHandles.CatchException(MethodHandle, Class, MethodHandle) Methode

Definition

Erstellt ein Methodenhandle, das ein Zielmethodenhandle anpasst, indem er in einem Ausnahmehandler ausgeführt wird.

[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

Parameter

target
MethodHandle

Methodenhandle zum Aufrufen

exType
Class

Der Typ der Ausnahme, die der Handler abfangen wird

handler
MethodHandle

Methodenhandle zum Aufrufen, wenn eine übereinstimmende Ausnahme ausgelöst wird

Gibt zurück

Methodenhandle, das die angegebene Try/Catch-Logik enthält

Attribute

Hinweise

Erstellt ein Methodenhandle, das ein Zielmethodenhandle anpasst, indem er in einem Ausnahmehandler ausgeführt wird. Wenn das Ziel normal zurückgegeben wird, gibt der Adapter diesen Wert zurück. Wenn eine Ausnahme, die dem angegebenen Typ entspricht, ausgelöst wird, wird das Fallbackhandle stattdessen für die Ausnahme und die ursprünglichen Argumente aufgerufen.

Das Ziel und der Handler müssen dasselbe entsprechende Argument und dieselben Rückgabetypen aufweisen, mit der Ausnahme, dass der Handler nachfolgende Argumente auslassen kann (ähnlich wie das Prädikat in #guardWithTest guardWithTest). Außerdem muss der Handler über einen zusätzlichen führenden Parameter oder exType einen Supertyp verfügen.

Hier ist pseudocode für den resultierenden Adapter. Im Code T stellt den Rückgabetyp des target Undhandler- und entsprechend des resultierenden Adapters dar; A/adie Typen und Werte von Argumenten für das resultierende Handle, das von handler; und , die/Bb argumente für das resultierende Handle verworfen von .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> Note that the saved arguments (a... in the pseudocode) cannot be modified by execution of the target, and so are passed unchanged from the caller to the handler, if the handler is invoked.

Das Ziel und der Handler müssen denselben Typ zurückgeben, auch wenn der Handler immer ausgelöst wird. (Dies kann z. B. passieren, weil der Handler eine finally Klausel simuliert). Um einen solchen auslösenden Handler zu erstellen, erstellen Sie die Handlererstellungslogik mit #throwException throwException, um ein Methodenhandle des richtigen Rückgabetyps zu erstellen.

Java-Dokumentation für java.lang.invoke.MethodHandles.catchException(java.lang.invoke.MethodHandle, java.lang.Class<? extends java.lang.Throwable>, java.lang.invoke.MethodHandle).

Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die vom Android Open Source-Projekt erstellt und freigegeben werden und gemäß den in der Creative Commons 2.5 Attribution License beschriebenen Begriffen verwendet werden.

Gilt für: