語言

MethodHandles.GuardWithTest(MethodHandle, MethodHandle, MethodHandle) 方法

定義

製作一個方法句柄,透過以測試保護目標方法柄,作為布林值的方法柄。

[Android.Runtime.Register("guardWithTest", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)]
public static Java.Lang.Invoke.MethodHandle? GuardWithTest(Java.Lang.Invoke.MethodHandle? test, Java.Lang.Invoke.MethodHandle? target, Java.Lang.Invoke.MethodHandle? fallback);
[<Android.Runtime.Register("guardWithTest", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)>]
static member GuardWithTest : Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle -> Java.Lang.Invoke.MethodHandle

參數

test
MethodHandle

用於測試的方法柄必須回傳布林值

target
MethodHandle

方法用 handle 在測試通過時呼叫

fallback
MethodHandle

方法的 handle 在測試失敗時呼叫

傳回

方法代柄,包含指定的 if/then/else 邏輯

屬性

備註

製作一個方法句柄,透過以測試保護目標方法柄,作為布林值的方法柄。 若守衛失效,則會呼叫備用把手。 三個方法的句柄必須有相同的對應參數和回傳類型,但測試的回傳型別必須是布林值,且該測試的參數數可比另外兩個方法的代言更少。

以下是產生的轉接器偽代碼: <blockquote>

{@code
            boolean test(A...);
            T target(A...,B...);
            T fallback(A...,B...);
            T adapter(A... a,B... b) {
              if (test(a...))
                return target(a..., b...);
              else
                return fallback(a..., b...);
            }
            }

</blockquote> 注意,偽代碼中的測試參數a... 無法透過測試執行被修改,因此會依照情況從呼叫者傳送至目標或備援,保持不變。

的 java.lang.invoke.MethodHandles.guardWithTest(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle)Java 檔。

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

適用於