語言

MethodHandles.CatchException(MethodHandle, Class, MethodHandle) 方法

定義

透過在例外處理器中執行目標方法代柄,製作一個方法代言會適配。

[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

參數

target
MethodHandle

方法 handle 以呼叫

exType
Class

處理者會捕捉的例外類型

handler
MethodHandle

方法 handle 在拋出相符例外時呼叫

傳回

方法控制柄,包含指定的嘗試/捕捉邏輯

屬性

備註

透過在例外處理器中執行目標方法代柄,製作一個方法代言會適配。 如果目標回傳正常,轉接器也會回傳該值。 若拋出符合指定型別的例外,則會呼叫該例外及原始參數的備援句柄。

目標與處理器必須有相同的對應參數與回傳類型,但處理器可省略尾隨參數(類似於 中的 #guardWithTest guardWithTest謂詞)。 此外,處理器必須有一個額外的前導參數 或 exType 超型。

這裡有個偽程式碼,代表產生的轉接器。 在程式碼中,代表T與handler的回傳型target別,對應地表示產生的適配器Aa/;、、為被 所消耗handler的對結果句柄的參數型別與值;以及/Bb ,則是被handler丟棄的參數的型別與值。 <引用>

{@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> 請注意,儲存的參數(a... 偽程式碼中)無法透過目標執行修改,因此若呼叫處理器被呼叫,則會不改變地從呼叫者傳遞給處理器。

目標與處理器必須回傳相同類型,即使處理器總是投擲。 (例如,這可能是因為處理器在模擬一個 finally 子句。) 要建立這樣的拋出處理器,將處理器建立邏輯 #throwException throwException與 組合,以建立正確回傳型別的方法處理器。

Java 文件 java.lang.invoke.MethodHandles.catchException(java.lang.invoke.MethodHandle, java.lang.Class<? extends java.lang.Throwable>, java.lang.invoke.MethodHandle)。

此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。

適用於