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破棄されたhandler結果のハンドルに対する引数の型とB/b値を表します。 <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 ドキュメント。

このページの一部は、によって作成および共有された作業に基づく変更であり、に記載されている条件に従って使用されます。

適用対象