共用方式為


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

呼叫的方法句柄

exType
Class

處理程式會攔截的例外狀況類型

handler
MethodHandle

擲回相符例外狀況時呼叫的方法句柄

傳回

方法句柄,其中包含指定的 try/catch 邏輯

屬性

備註

藉由在例外狀況處理程式內執行方法句柄,讓方法句柄調整目標方法句柄。 如果目標正常傳回,配接器會傳回該值。 如果擲回符合指定類型的例外狀況,則會改為在例外狀況上呼叫後援句柄,加上原始自變數。

目標與處理程式必須具有相同的對應自變數和傳回型別,不同之處在於處理程式可能會省略尾端自變數(類似於 中的 #guardWithTest guardWithTest述詞)。 此外,處理程式必須具有的額外前置參數 exType 或超類型。

以下是產生的配接器的虛擬程序代碼。 在程式代碼中,T表示和handlertarget傳回型別,並對應至所產生/aA配接器的傳回型別;、 自變數的型別和值,以及 所捨棄handler之結果句柄/handlerBb的自變數型別和值。 <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> 請注意,如果叫用處理程式,儲存的自變數(a... 在虛擬程式代碼中)無法藉由執行目標來修改,因此會從呼叫端未變更傳遞至處理程式。

即使處理程式一律擲回,目標與處理程式也必須傳回相同的類型。 (例如,這可能是因為處理程式正在模擬 finally 子句)。 若要建立這類擲回處理程式,請使用 撰寫處理程式建立邏輯 #throwException throwException,以建立正確傳回型別的方法句柄。

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

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

適用於