java.lang.Object
jdk.dynalink.linker.GuardedInvocation
表示条件有效的方法句柄。通常作为
GuardingDynamicLinker.getGuardedInvocation(LinkRequest, LinkerServices) 和 GuardingTypeConverterFactory.convertToType(Class, Class, Supplier) 的返回值产生。它是调用方法句柄的不可变元组,定义调用句柄适用性的保护方法句柄,可用于调用句柄外部无效的零个或多个切换点,以及在异常期间抛出的异常类型调用方法句柄也会使其无效。如果保护句柄为其参数返回 true,并且只要任何切换点未失效,并且只要它不抛出指定类型的异常,则调用句柄适合调用。守卫、切换点和异常类型都是可选的(没有它们的守卫调用是无条件有效的)。
-
构造方法总结
构造方法构造方法描述GuardedInvocation(MethodHandle invocation) 创建一个新的无条件保护调用。GuardedInvocation(MethodHandle invocation, MethodHandle guard) 使用保护方法句柄创建一个新的保护调用。GuardedInvocation(MethodHandle invocation, MethodHandle guard, SwitchPoint switchPoint) 创建一个新的受保护的调用,同时具有一个保护方法句柄和一个可用于使其无效的切换点。GuardedInvocation(MethodHandle invocation, MethodHandle guard, SwitchPoint[] switchPoints, Class<? extends Throwable> exception) 创建一个新的受保护的调用,带有一个保护方法句柄、任意数量的可用于使其无效的切换点,以及一个在调用时抛出的异常也会使其无效。GuardedInvocation(MethodHandle invocation, MethodHandle guard, SwitchPoint switchPoint, Class<? extends Throwable> exception) 创建一个新的受保护的调用,带有一个保护方法句柄,一个可用于使其无效的切换点,以及一个如果在调用时抛出也会使其无效的异常。GuardedInvocation(MethodHandle invocation, SwitchPoint switchPoint) 创建一个新的受保护的调用,可以通过切换点使其失效。 -
方法总结
修饰符和类型方法描述addSwitchPoint(SwitchPoint newSwitchPoint) 使用添加的切换点创建新的受保护调用。asType(MethodType newType) 更改调用的类型,就好像MethodHandle.asType(MethodType)应用于它的调用和它的守卫,如果它有一个(返回类型更改为boolean,并且参数计数可能被守卫截断)。asType(CallSiteDescriptor desc) 更改调用的类型,就好像MethodHandle.asType(MethodType)应用于它的调用和它的守卫,如果它有一个(返回类型更改为守卫的boolean)。asType(LinkerServices linkerServices, MethodType newType) 更改调用的类型,就好像LinkerServices.asType(MethodHandle, MethodType)应用于它的调用和它的守卫,如果它有一个(返回类型更改为boolean,并且参数计数可能被守卫截断)。asTypeSafeReturn(LinkerServices linkerServices, MethodType newType) 更改调用的类型,就好像LinkerServices.asTypeLosslessReturn(MethodHandle, MethodType)应用于它的调用,LinkerServices.asType(MethodHandle, MethodType)应用于它的守卫,如果它有一个(返回类型更改为boolean,并且参数计数可能被守卫截断)。compose(MethodHandle fallback) 将调用、守卫、切换点和异常组合成一个复合方法句柄,该句柄知道如何在守卫失败或调用无效时回退。compose(MethodHandle guardFallback, MethodHandle switchpointFallback, MethodHandle catchFallback) 将调用、守卫、切换点和异常组合成一个复合方法句柄,该句柄知道如何在守卫失败或调用无效时回退。dropArguments(int pos, Class<?>... valueTypes) 使用MethodHandles.dropArguments(MethodHandle, int, Class...)进行调用,在调用和守卫(如果它存在并且至少具有pos参数)中删除参数。dropArguments(int pos, List<Class<?>> valueTypes) 使用MethodHandles.dropArguments(MethodHandle, int, List)进行调用,在调用和守卫(如果它存在并且至少具有pos参数)中删除参数。filterArguments(int pos, MethodHandle... filters) 使用MethodHandles.filterArguments(MethodHandle, int, MethodHandle...)将参数过滤器应用于调用和守卫(如果它存在并且至少有pos + 1个参数)。返回异常类型,如果调用抛出该异常类型,则应使此受保护调用的链接无效。getGuard()返回守卫方法句柄。返回调用方法句柄。返回可用于使此调用句柄的链接无效的切换点。boolean当且仅当此受保护的调用具有至少一个无效的切换点时才返回 true。replaceMethods(MethodHandle newInvocation, MethodHandle newGuard) 使用不同的方法创建一个新的受保护的调用,保留切换点。
-
构造方法详细信息
-
GuardedInvocation
创建一个新的无条件保护调用。它是无条件的,因为它没有失效。- 参数:
invocation- 表示调用的方法句柄。不得为空。- 抛出:
NullPointerException- 如果调用为空。
-
GuardedInvocation
使用保护方法句柄创建一个新的保护调用。- 参数:
invocation- 表示调用的方法句柄。不得为空。guard- 表示守卫的方法句柄。根据MethodHandles.guardWithTest(MethodHandle, MethodHandle, MethodHandle)必须与invocation句柄兼容。对于一些有用的守卫,请查看Guards类。它可以为 null 以表示无条件调用。- 抛出:
NullPointerException- 如果调用为空。
-
GuardedInvocation
创建一个新的受保护的调用,可以通过切换点使其失效。- 参数:
invocation- 表示调用的方法句柄。不得为空。switchPoint- 可用于使此链接无效的可选切换点。它可以为空。如果为空,则表示无条件调用。- 抛出:
NullPointerException- 如果调用为空。
-
GuardedInvocation
创建一个新的受保护的调用,同时具有一个保护方法句柄和一个可用于使其无效的切换点。- 参数:
invocation- 表示调用的方法句柄。不得为空。guard- 表示守卫的方法句柄。根据MethodHandles.guardWithTest(MethodHandle, MethodHandle, MethodHandle)必须与invocation句柄兼容。对于一些有用的守卫,请查看Guards类。它可以为空。如果它和切换点都为空,则表示无条件调用。switchPoint- 可用于使此链接无效的可选切换点。- 抛出:
NullPointerException- 如果调用为空。
-
GuardedInvocation
public GuardedInvocation(MethodHandle invocation, MethodHandle guard, SwitchPoint switchPoint, Class <? extends Throwable > exception) 创建一个新的受保护的调用,带有一个保护方法句柄,一个可用于使其无效的切换点,以及一个如果在调用时抛出也会使其无效的异常。- 参数:
invocation- 表示调用的方法句柄。不得为空。guard- 表示守卫的方法句柄。根据MethodHandles.guardWithTest(MethodHandle, MethodHandle, MethodHandle)必须与invocation句柄兼容。对于一些有用的守卫,请查看Guards类。它可以为空。如果它和切换点以及异常都为null,这代表一个无条件调用。switchPoint- 可用于使此链接无效的可选切换点。exception- 调用抛出的可选异常类型也会使其无效。- 抛出:
NullPointerException- 如果调用为空。
-
GuardedInvocation
public GuardedInvocation(MethodHandle invocation, MethodHandle guard, SwitchPoint [] switchPoints, Class <? extends Throwable > exception) 创建一个新的受保护的调用,带有一个保护方法句柄、任意数量的可用于使其无效的切换点,以及一个在调用时抛出的异常也会使其无效。- 参数:
invocation- 表示调用的方法句柄。不得为空。guard- 表示守卫的方法句柄。根据MethodHandles.guardWithTest(MethodHandle, MethodHandle, MethodHandle)必须与invocation句柄兼容。对于一些有用的守卫,请查看Guards类。它可以为空。如果它和异常都为 null,并且没有指定切换点,则表示无条件调用。switchPoints- 可用于使此链接无效的可选切换点。exception- 调用抛出的可选异常类型也会使其无效。- 抛出:
NullPointerException- 如果调用为空。
-
-
方法详情
-
getInvocation
返回调用方法句柄。- 返回:
- 调用方法句柄。它永远不会为空。
-
getGuard
返回守卫方法句柄。- 返回:
- 守卫方法句柄。可以为空。
-
getSwitchPoints
返回可用于使此调用句柄的链接无效的切换点。- 返回:
- 可用于使此调用句柄的链接无效的切换点。可以为空。
-
getException
返回异常类型,如果调用抛出该异常类型,则应使此受保护调用的链接无效。- 返回:
- 如果抛出应该用于使链接无效的异常类型。可以为空。
-
hasBeenInvalidated
public boolean hasBeenInvalidated()当且仅当此受保护的调用具有至少一个无效的切换点时才返回 true。- 返回:
- 当且仅当此受保护的调用至少有一个无效的切换点时才为真。
-
replaceMethods
使用不同的方法创建一个新的受保护的调用,保留切换点。- 参数:
newInvocation- 新调用newGuard- 新守卫- 返回:
- 一个新的受保护的调用,具有替换的方法和与此调用相同的切换点。
-
addSwitchPoint
使用添加的切换点创建新的受保护调用。- 参数:
newSwitchPoint- 新的开关点。可以为 null,在这种情况下,此方法返回当前受保护的调用,没有任何更改。- 返回:
- 带有添加的切换点的受保护调用。
-
asType
更改调用的类型,就好像MethodHandle.asType(MethodType)应用于它的调用和它的守卫,如果它有一个(返回类型更改为boolean,并且参数计数可能被守卫截断)。如果调用已经是所需类型,则返回此对象。- 参数:
newType- 新的调用类型。- 返回:
- 应用了新类型的受保护调用。
-
asType
更改调用的类型,就好像LinkerServices.asType(MethodHandle, MethodType)应用于它的调用和它的守卫,如果它有一个(返回类型更改为boolean,并且参数计数可能被守卫截断)。如果调用已经是所需类型,则返回此对象。- 参数:
linkerServices- 用于转换的链接器服务newType- 新的调用类型。- 返回:
- 应用了新类型的受保护调用。
-
asTypeSafeReturn
更改调用的类型,就好像LinkerServices.asTypeLosslessReturn(MethodHandle, MethodType)应用于它的调用,LinkerServices.asType(MethodHandle, MethodType)应用于它的守卫,如果它有一个(返回类型更改为boolean,并且参数计数可能被守卫截断)。如果调用未更改其类型,则返回此对象。- 参数:
linkerServices- 用于转换的链接器服务newType- 新的调用类型。- 返回:
- 应用了新类型的受保护调用。
-
asType
更改调用的类型,就好像MethodHandle.asType(MethodType)应用于它的调用和它的守卫,如果它有一个(返回类型更改为守卫的boolean)。如果调用已经是所需类型,则返回此对象。- 参数:
desc- 其方法类型已调整的调用描述符。- 返回:
- 应用了新类型的受保护调用。
-
filterArguments
使用MethodHandles.filterArguments(MethodHandle, int, MethodHandle...)将参数过滤器应用于调用和守卫(如果它存在并且至少有pos + 1个参数)。- 参数:
pos- 被过滤的第一个参数的位置filters- 参数过滤器- 返回:
- 过滤后的调用
-
dropArguments
使用MethodHandles.dropArguments(MethodHandle, int, List)进行调用,在调用和守卫(如果它存在并且至少具有pos参数)中删除参数。- 参数:
pos- 被丢弃的第一个参数的位置valueTypes- 被丢弃的值的类型- 返回:
- 删除参数的调用
-
dropArguments
使用MethodHandles.dropArguments(MethodHandle, int, Class...)进行调用,在调用和守卫(如果它存在并且至少具有pos参数)中删除参数。- 参数:
pos- 被丢弃的第一个参数的位置valueTypes- 被丢弃的值的类型- 返回:
- 删除参数的调用
-
compose
将调用、守卫、切换点和异常组合成一个复合方法句柄,该句柄知道如何在守卫失败或调用无效时回退。- 参数:
fallback- 切换点无效时的回退方法句柄,守卫返回 false,或抛出无效异常。- 返回:
- 复合方法句柄。
-
compose
public MethodHandle compose(MethodHandle guardFallback, MethodHandle switchpointFallback, MethodHandle catchFallback) 将调用、守卫、切换点和异常组合成一个复合方法句柄,该句柄知道如何在守卫失败或调用无效时回退。- 参数:
guardFallback- 如果 guard 返回 false,则回退方法句柄。switchpointFallback- 切换点无效时的回退方法句柄。catchFallback- 异常处理程序触发时的回退方法。- 返回:
- 复合方法句柄。
-