MethodHandles.CatchException(MethodHandle, Class, MethodHandle) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
透過在例外處理器中執行目標方法代柄,製作一個方法代言會適配。
[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與 組合,以建立正確回傳型別的方法處理器。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。