java.lang.Object
jdk.dynalink.linker.GuardedInvocation
表示有条件有效的方法句柄。通常作为
GuardingDynamicLinker.getGuardedInvocation(LinkRequest, LinkerServices)
和GuardingTypeConverterFactory.convertToType(Class, Class, Supplier)
的返回值生成。它是一个不可变的元组,包含一个调用方法句柄、定义调用句柄适用性的保护方法句柄、零个或多个用于外部使调用句柄失效的开关点,以及在调用方法句柄调用时抛出的异常类型也会使其失效。如果保护句柄对其参数返回true,并且只要任何开关点未失效,并且它没有抛出指定类型的异常,那么调用句柄就适合调用。保护句柄、开关点和异常类型都是可选的(一个没有它们的受保护调用是无条件有效的)。
-
Constructor Summary
ConstructorDescriptionGuardedInvocation
(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) 创建一个可以通过开关点使其失效的新受保护调用。 -
Method Summary
Modifier and TypeMethodDescriptionaddSwitchPoint
(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) 进行调用,同时在调用和保护中删除参数(如果存在并且至少有pos
个参数)使用MethodHandles.dropArguments(MethodHandle, int, Class...)
。dropArguments
(int pos, List<Class<?>> valueTypes) 进行调用,同时在调用和保护中删除参数(如果存在并且至少有pos
个参数)使用MethodHandles.dropArguments(MethodHandle, int, List)
。filterArguments
(int pos, MethodHandle... filters) 对调用和保护(如果存在并且至少有pos + 1
个参数)应用参数过滤器使用MethodHandles.filterArguments(MethodHandle, int, MethodHandle...)
。返回调用时抛出的异常类型,应使此受保护调用的链接失效。getGuard()
返回保护方法句柄。返回调用方法句柄。返回可用于使此调用句柄失效的开关点。boolean
如果仅当此受保护调用至少有一个失效的开关点时返回true。replaceMethods
(MethodHandle newInvocation, MethodHandle newGuard) 创建一个带有不同方法的新受保护调用,保留开关点。
-
Constructor Details
-
GuardedInvocation
创建一个新的无条件受保护调用。它是无条件的,因为它没有失效。- 参数:
-
invocation
- 表示调用的方法句柄。不得为null。 - 抛出:
-
NullPointerException
- 如果调用为null。
-
GuardedInvocation
创建一个带有保护方法句柄的新受保护调用。- 参数:
-
invocation
- 表示调用的方法句柄。不得为null。 -
guard
- 表示保护的方法句柄。必须与invocation
句柄兼容,如MethodHandles.guardWithTest(MethodHandle, MethodHandle, MethodHandle)
所述。对于一些有用的保护,请查看Guards
类。它可以为null,表示无条件调用。 - 抛出:
-
NullPointerException
- 如果调用为null。
-
GuardedInvocation
创建一个可以通过开关点使其失效的新受保护调用。- 参数:
-
invocation
- 表示调用的方法句柄。不得为null。 -
switchPoint
- 可选的开关点,可用于使此链接失效。它可以为null。如果为null,则表示无条件调用。 - 抛出:
-
NullPointerException
- 如果调用为null。
-
GuardedInvocation
创建一个带有保护方法句柄和可用于使其失效的开关点的新受保护调用。- 参数:
-
invocation
- 表示调用的方法句柄。不得为null。 -
guard
- 表示保护的方法句柄。必须与invocation
句柄兼容,如MethodHandles.guardWithTest(MethodHandle, MethodHandle, MethodHandle)
所述。对于一些有用的保护,请查看Guards
类。它可以为null。如果保护和开关点都为null,则表示无条件调用。 -
switchPoint
- 可选的开关点,可用于使此链接失效。 - 抛出:
-
NullPointerException
- 如果调用为null。
-
GuardedInvocation
public GuardedInvocation(MethodHandle invocation, MethodHandle guard, SwitchPoint switchPoint, Class<? extends Throwable> exception) 创建一个带有保护方法句柄、可用于使其失效的开关点以及在调用时抛出也会使其失效的异常的新受保护调用。- 参数:
-
invocation
- 表示调用的方法句柄。不得为null。 -
guard
- 表示保护的方法句柄。必须与invocation
句柄兼容,如MethodHandles.guardWithTest(MethodHandle, MethodHandle, MethodHandle)
所述。对于一些有用的保护,请查看Guards
类。它可以为null。如果它、开关点和异常都为null,则表示无条件调用。 -
switchPoint
- 可选的开关点,可用于使此链接失效。 -
exception
- 可选的在调用时抛出也会使其失效的异常类型。 - 抛出:
-
NullPointerException
- 如果调用为null。
-
GuardedInvocation
public GuardedInvocation(MethodHandle invocation, MethodHandle guard, SwitchPoint[] switchPoints, Class<? extends Throwable> exception) 创建一个带有保护方法句柄、任意数量可用于使其失效的开关点以及在调用时抛出也会使其失效的异常的新受保护调用。- 参数:
-
invocation
- 表示调用的方法句柄。不能为空。 -
guard
- 表示守卫的方法句柄。必须与invocation
句柄兼容,参见MethodHandles.guardWithTest(MethodHandle, MethodHandle, MethodHandle)
。对于一些有用的守卫,请查看Guards
类。可以为null。如果它和异常都为null,并且没有指定开关点,这表示无条件调用。 -
switchPoints
- 可选的开关点,可用于使此链接失效。 -
exception
- 调用时抛出的可选异常类型也会使其失效。 - 抛出:
-
NullPointerException
- 如果调用为null。
-
-
Method Details
-
getInvocation
返回调用方法句柄。- 返回:
- 调用方法句柄。永远不会为null。
-
getGuard
返回守卫方法句柄。- 返回:
- 守卫方法句柄。可以为null。
-
getSwitchPoints
返回可用于使此调用句柄链接失效的开关点。- 返回:
- 可用于使此调用句柄链接失效的开关点。可以为null。
-
getException
返回如果此守护调用至少有一个失效的开关点,则为true。- 返回:
- 如果此守护调用至少有一个失效的开关点,则为true。
-
hasBeenInvalidated
public boolean hasBeenInvalidated()创建一个具有不同方法的守护调用,保留开关点。- Returns:
- true if and only if this guarded invocation has at least one invalidated switch point.
-
replaceMethods
Creates a new guarded invocation with different methods, preserving the switch point.- 参数:
-
newInvocation
- 新的调用 -
newGuard
- 新的守卫 - 返回:
- 具有替换方法和与此调用相同开关点的新守护调用。
-
addSwitchPoint
创建一个具有添加开关点的新守护调用。- 参数:
-
newSwitchPoint
- 新的开关点。如果为null,则此方法返回当前的守护调用,不做任何更改。 - 返回:
- 具有添加开关点的守护调用。
-
asType
更改调用的类型,就好像将其调用和守卫(如果有)应用于其调用和守卫的MethodHandle.asType(MethodType)
(返回类型更改为布尔值,并且可能截断守卫的参数计数)。如果调用已经是所需类型,则返回此对象。- 参数:
-
newType
- 调用的新类型。 - 返回:
- 具有新类型的守护调用。
-
asType
更改调用的类型,就好像将其调用和守卫(如果有)应用于其调用和守卫的LinkerServices.asType(MethodHandle, MethodType)
(返回类型更改为布尔值,并且可能截断守卫的参数计数)。如果调用已经是所需类型,则返回此对象。- 参数:
-
linkerServices
- 用于转换的链接服务 -
newType
- 调用的新类型。 - 返回:
- 具有新类型的守护调用。
-
asTypeSafeReturn
更改调用的类型,就好像将其调用和守卫(如果有)应用于其调用和守卫的LinkerServices.asTypeLosslessReturn(MethodHandle, MethodType)
(返回类型更改为布尔值,并且可能截断守卫的参数计数)。如果调用不更改其类型,则返回此对象。- 参数:
-
linkerServices
- 用于转换的链接服务 -
newType
- 调用的新类型。 - 返回:
- 具有新类型的守护调用。
-
asType
更改调用的类型,就好像将其调用和守卫(如果有)应用于其调用和守卫的MethodHandle.asType(MethodType)
(返回类型更改为布尔值)。如果调用已经是所需类型,则返回此对象。- 参数:
-
desc
- 被调整方法类型的调用描述符。 - 返回:
- 具有新类型的守护调用。
-
filterArguments
对调用和守卫(如果存在并且至少有pos + 1
个参数)应用参数过滤器,使用MethodHandles.filterArguments(MethodHandle, int, MethodHandle...)
。- 参数:
-
pos
- 被过滤的第一个参数的位置 -
filters
- 参数过滤器 - 返回:
- 一个过滤后的调用
-
dropArguments
对调用和守卫(如果存在并且至少有pos
个参数)应用参数过滤器,使用MethodHandles.dropArguments(MethodHandle, int, List)
。- 参数:
-
pos
- 被删除的第一个参数的位置 -
valueTypes
- 被删除值的类型 - 返回:
- 一个删除参数的调用
-
dropArguments
对调用和守卫(如果存在并且至少有pos
个参数)应用参数过滤器,使用MethodHandles.dropArguments(MethodHandle, int, Class...)
。- 参数:
-
pos
- 被删除的第一个参数的位置 -
valueTypes
- 被删除值的类型 - 返回:
- 一个删除参数的调用
-
compose
将调用、守卫、开关点和异常组合成一个复合方法句柄,当守卫失败或调用失效时,知道如何回退。- 参数:
-
fallback
- 当开关点失效、守卫返回false或触发无效异常时的回退方法句柄。 - 返回:
- 一个复合方法句柄。
-
compose
public MethodHandle compose(MethodHandle guardFallback, MethodHandle switchpointFallback, MethodHandle catchFallback) 将调用、守卫、开关点和异常组合成一个复合方法句柄,当守卫失败或调用失效时,知道如何回退。- 参数:
-
guardFallback
- 如果守卫返回false,则使用的回退方法句柄。 -
switchpointFallback
- 如果开关点失效,则使用的回退方法句柄。 -
catchFallback
- 如果异常处理程序触发,则使用的回退方法。 - 返回:
- 一个复合方法句柄。
-