MethodHandles.GuardWithTest(MethodHandle, MethodHandle, MethodHandle) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
製作一個方法句柄,透過以測試保護目標方法柄,作為布林值的方法柄。
[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... 無法透過測試執行被修改,因此會依照情況從呼叫者傳送至目標或備援,保持不變。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。