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

测试通过时调用的方法句柄

fallback
MethodHandle

测试失败时调用的方法句柄

返回

合并指定 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文档java.lang.invoke.MethodHandles.guardWithTest(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle)

本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。

适用于