Module  jdk.dynalink
软件包  jdk.dynalink.linker

Class GuardedInvocation



  • public class GuardedInvocation
    extends Object
    表示有条件的有效方法句柄。 通常产生的返回值为GuardingDynamicLinker.getGuardedInvocation(LinkRequest, LinkerServices)GuardingTypeConverterFactory.convertToType(Class, Class, Supplier) 它是一个调用方法句柄的不可变元组,一个保护方法句柄,它定义了调用句柄的适用性,可以用于调用句柄的外部无效的零个或多个切换点,以及如果在方法句柄的调用也使其无效。 如果保护句柄为其参数返回true,并且只要任何一个切换点都无效,并且只要不抛出指定类型的异常,则调用句柄适用于调用。 保护,切换点和异常类型都是可选的(无条件调用无条件有效)。
    • 构造方法详细信息

      • GuardedInvocation

        public GuardedInvocation​(MethodHandle invocation)
        创建一个新的无条件守卫调用。 它是无条件的,因为它没有无效。
        参数
        invocation - 表示调用的方法句柄。 不能为空。
        异常
        NullPointerException - 如果调用为空。
      • GuardedInvocation

        public GuardedInvocation​(MethodHandle invocation,
                                 SwitchPoint switchPoint)
        创建一个新的受保护的调用,可以由切换点无效。
        参数
        invocation - 表示调用的方法句柄。 不能为空。
        switchPoint - 可用于使此链接无效的可选切换点。 它可以为空。 如果为空,则表示无条件调用。
        异常
        NullPointerException - 如果调用为空。
      • GuardedInvocation

        public GuardedInvocation​(MethodHandle invocation,
                                 MethodHandle guard,
                                 SwitchPoint switchPoint)
        创建一个新的守卫调用,同时具有保护方法句柄和可用于使其无效的切换点。
        参数
        invocation - 表示调用的方法句柄。 不能为空。
        guard - 代表守卫的方法句柄。 必须与兼容invocation把手按MethodHandles.guardWithTest(MethodHandle, MethodHandle, MethodHandle) 对于一些有用的守卫,请查看Guards类。 它可以为空。 如果它和切换点都为空,则表示无条件调用。
        switchPoint - 可用于使此链接无效的可选开关点。
        异常
        NullPointerException - 如果调用为null。
      • GuardedInvocation

        public GuardedInvocation​(MethodHandle invocation,
                                 MethodHandle guard,
                                 SwitchPoint switchPoint,
                                 Class<? extends Throwable> exception)
        创建一个新的守卫调用,具有保护方法句柄,可用于使其无效的切换点,以及如果在调用时抛出也会使其失效的异常。
        参数
        invocation - 表示调用的方法句柄。 不能为空。
        guard - 表示守卫的方法句柄。 必须符合invocation句柄, 符合MethodHandles.guardWithTest(MethodHandle, MethodHandle, MethodHandle) 对于一些有用的守卫,请查看Guards课程。 它可以为空。 如果它和切换点和异常都为空,则表示无条件调用。
        switchPoint - 可用于使此链接无效的可选切换点。
        exception - 调用抛出的可选异常类型也使其无效。
        异常
        NullPointerException - 如果调用为空。
      • GuardedInvocation

        public GuardedInvocation​(MethodHandle invocation,
                                 MethodHandle guard,
                                 SwitchPoint[] switchPoints,
                                 Class<? extends Throwable> exception)
        创建一个新的有保护的调用,具有保护方法句柄,可以使用任何数量的切换点来使其无效,以及如果在调用时抛出的异常也会使其失效。
        参数
        invocation - 表示调用的方法句柄。 不能为空。
        guard - 表示守卫的方法句柄。 必须符合invocation手柄, 符合MethodHandles.guardWithTest(MethodHandle, MethodHandle, MethodHandle) 对于一些有用的守卫,请查看Guards课程。 它可以为空。 如果它和异常都为空,并且没有指定切换点,则表示无条件调用。
        switchPoints - 可用于使此链接无效的可选切换点。
        exception - 调用抛出的可选异常类型也使其无效。
        异常
        NullPointerException - 如果调用为空。
    • 方法详细信息

      • getInvocation

        public MethodHandle getInvocation​()
        返回调用方法句柄。
        结果
        调用方法句柄。 它永远不会为空。
      • getGuard

        public MethodHandle getGuard​()
        返回保护方法句柄。
        结果
        防护方法手柄。 可以为null。
      • getSwitchPoints

        public SwitchPoint[] getSwitchPoints​()
        返回可用于使该调用句柄的链接无效的切换点。
        结果
        可用于使此调用句柄的链接无效的开关点。 可以为null。
      • getException

        public Class<? extends Throwable> getException​()
        返回异常类型,如果调用抛出应该使该被守卫的调用的链接失效。
        结果
        应该使用抛出的异常类型来使链接失效。 可以为null。
      • hasBeenInvalidated

        public boolean hasBeenInvalidated​()
        当且仅当该被守卫的调用至少有一个无效的切换点时才返回true。
        结果
        如果且仅当此保护调用至少有一个无效的切换点,则为真。
      • replaceMethods

        public GuardedInvocation replaceMethods​(MethodHandle newInvocation,
                                                MethodHandle newGuard)
        用不同的方法创建一个新的守卫调用,保留切换点。
        参数
        newInvocation - 新的调用
        newGuard - 新卫兵
        结果
        一个新的被保护的调用与替换的方法和与这个调用相同的切换点。
      • addSwitchPoint

        public GuardedInvocation addSwitchPoint​(SwitchPoint newSwitchPoint)
        使用添加的切换点创建新的守卫调用。
        参数
        newSwitchPoint - 新开关点。 可以为null,在这种情况下,此方法将返回当前受保护的调用,而不进行任何更改。
        结果
        一个被保护的调用与添加的切换点。
      • asType

        public GuardedInvocation asType​(MethodType newType)
        更改调用的类型,就好像MethodHandle.asType(MethodType)应用于其调用及其保护,如果它有一个(返回类型更改为布尔值,并且参数计数可能被截断为保护)。 如果调用已经是必需的类型,则返回此对象。
        参数
        newType - 新的调用类型。
        结果
        使用新类型的守卫调用。
      • asType

        public GuardedInvocation asType​(LinkerServices linkerServices,
                                        MethodType newType)
        更改调用的类型,就好像LinkerServices.asType(MethodHandle, MethodType)被应用于其调用及其保护(如果它有一个(返回类型更改为布尔值,并且参数计数可能被截断为保护))。 如果调用已经是必需的类型,则返回此对象。
        参数
        linkerServices - 用于转换的链接器服务
        newType - 新的调用类型。
        结果
        使用新类型的守卫调用。
      • asType

        public GuardedInvocation asType​(CallSiteDescriptor desc)
        更改调用的类型,就好像MethodHandle.asType(MethodType)应用于其调用及其保护,如果它有一个(返回类型更改为布尔值守 )。 如果调用已经是必需的类型,则返回此对象。
        参数
        desc - 调用方法类型的调用描述符。
        结果
        使用新类型的守卫调用。
      • compose

        public MethodHandle compose​(MethodHandle fallback)
        将调用,保护,切换点和异常组合到复合方法句柄中,该句柄知道当保护失败或调用无效时如何退回。
        参数
        fallback - 当切换点无效的后备方法句柄,保护返回false或抛出异常无效。
        结果
        一个复合方法句柄。
      • compose

        public MethodHandle compose​(MethodHandle guardFallback,
                                    MethodHandle switchpointFallback,
                                    MethodHandle catchFallback)
        将调用,保护,切换点和异常组合到复合方法句柄中,该句柄知道当保护失败或调用无效时如何退回。
        参数
        switchpointFallback - 在切换点无效的情况下的回退方法句柄。
        guardFallback - guardFallback方法句柄在case guard返回false。
        catchFallback - 异常处理程序触发时的后备方法。
        结果
        一个复合方法句柄。