Module jdk.dynalink

Class GuardedInvocation

java.lang.Object
jdk.dynalink.linker.GuardedInvocation

public class GuardedInvocation extends Object
表示有条件有效的方法句柄。通常作为GuardingDynamicLinker.getGuardedInvocation(LinkRequest, LinkerServices)GuardingTypeConverterFactory.convertToType(Class, Class, Supplier)的返回值生成。它是一个不可变的元组,包含一个调用方法句柄、定义调用句柄适用性的保护方法句柄、零个或多个用于外部使调用句柄失效的开关点,以及在调用方法句柄调用时抛出的异常类型也会使其失效。如果保护句柄对其参数返回true,并且只要任何开关点未失效,并且它没有抛出指定类型的异常,那么调用句柄就适合调用。保护句柄、开关点和异常类型都是可选的(一个没有它们的受保护调用是无条件有效的)。
  • Constructor Details

    • GuardedInvocation

      public GuardedInvocation(MethodHandle invocation)
      创建一个新的无条件受保护调用。它是无条件的,因为它没有失效。
      参数:
      invocation - 表示调用的方法句柄。不得为null。
      抛出:
      NullPointerException - 如果调用为null。
    • GuardedInvocation

      public GuardedInvocation(MethodHandle invocation, MethodHandle guard)
      创建一个带有保护方法句柄的新受保护调用。
      参数:
      invocation - 表示调用的方法句柄。不得为null。
      guard - 表示保护的方法句柄。必须与invocation句柄兼容,如MethodHandles.guardWithTest(MethodHandle, MethodHandle, MethodHandle)所述。对于一些有用的保护,请查看Guards类。它可以为null,表示无条件调用。
      抛出:
      NullPointerException - 如果调用为null。
    • GuardedInvocation

      public GuardedInvocation(MethodHandle invocation, SwitchPoint switchPoint)
      创建一个可以通过开关点使其失效的新受保护调用。
      参数:
      invocation - 表示调用的方法句柄。不得为null。
      switchPoint - 可选的开关点,可用于使此链接失效。它可以为null。如果为null,则表示无条件调用。
      抛出:
      NullPointerException - 如果调用为null。
    • GuardedInvocation

      public GuardedInvocation(MethodHandle invocation, MethodHandle guard, SwitchPoint switchPoint)
      创建一个带有保护方法句柄和可用于使其失效的开关点的新受保护调用。
      参数:
      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

      public MethodHandle getInvocation()
      返回调用方法句柄。
      返回:
      调用方法句柄。永远不会为null。
    • getGuard

      public MethodHandle getGuard()
      返回守卫方法句柄。
      返回:
      守卫方法句柄。可以为null。
    • getSwitchPoints

      public SwitchPoint[] getSwitchPoints()
      返回可用于使此调用句柄链接失效的开关点。
      返回:
      可用于使此调用句柄链接失效的开关点。可以为null。
    • getException

      public Class<? extends Throwable> getException()
      返回如果此守护调用至少有一个失效的开关点,则为true。
      返回:
      如果此守护调用至少有一个失效的开关点,则为true。
    • hasBeenInvalidated

      public boolean hasBeenInvalidated()
      创建一个具有不同方法的守护调用,保留开关点。
      Returns:
      true if and only if this guarded invocation has at least one invalidated switch point.
    • replaceMethods

      public GuardedInvocation replaceMethods(MethodHandle newInvocation, MethodHandle newGuard)
      Creates a new guarded invocation with different methods, preserving the switch point.
      参数:
      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 - 调用的新类型。
      返回:
      具有新类型的守护调用。
    • asTypeSafeReturn

      public GuardedInvocation asTypeSafeReturn(LinkerServices linkerServices, MethodType newType)
      更改调用的类型,就好像将其调用和守卫(如果有)应用于其调用和守卫的LinkerServices.asTypeLosslessReturn(MethodHandle, MethodType)(返回类型更改为布尔值,并且可能截断守卫的参数计数)。如果调用不更改其类型,则返回此对象。
      参数:
      linkerServices - 用于转换的链接服务
      newType - 调用的新类型。
      返回:
      具有新类型的守护调用。
    • asType

      public GuardedInvocation asType(CallSiteDescriptor desc)
      更改调用的类型,就好像将其调用和守卫(如果有)应用于其调用和守卫的MethodHandle.asType(MethodType)(返回类型更改为布尔值)。如果调用已经是所需类型,则返回此对象。
      参数:
      desc - 被调整方法类型的调用描述符。
      返回:
      具有新类型的守护调用。
    • filterArguments

      public GuardedInvocation filterArguments(int pos, MethodHandle... filters)
      对调用和守卫(如果存在并且至少有pos + 1个参数)应用参数过滤器,使用MethodHandles.filterArguments(MethodHandle, int, MethodHandle...)
      参数:
      pos - 被过滤的第一个参数的位置
      filters - 参数过滤器
      返回:
      一个过滤后的调用
    • dropArguments

      public GuardedInvocation dropArguments(int pos, List<Class<?>> valueTypes)
      对调用和守卫(如果存在并且至少有pos个参数)应用参数过滤器,使用MethodHandles.dropArguments(MethodHandle, int, List)
      参数:
      pos - 被删除的第一个参数的位置
      valueTypes - 被删除值的类型
      返回:
      一个删除参数的调用
    • dropArguments

      public GuardedInvocation dropArguments(int pos, Class<?>... valueTypes)
      对调用和守卫(如果存在并且至少有pos个参数)应用参数过滤器,使用MethodHandles.dropArguments(MethodHandle, int, Class...)
      参数:
      pos - 被删除的第一个参数的位置
      valueTypes - 被删除值的类型
      返回:
      一个删除参数的调用
    • compose

      public MethodHandle compose(MethodHandle fallback)
      将调用、守卫、开关点和异常组合成一个复合方法句柄,当守卫失败或调用失效时,知道如何回退。
      参数:
      fallback - 当开关点失效、守卫返回false或触发无效异常时的回退方法句柄。
      返回:
      一个复合方法句柄。
    • compose

      public MethodHandle compose(MethodHandle guardFallback, MethodHandle switchpointFallback, MethodHandle catchFallback)
      将调用、守卫、开关点和异常组合成一个复合方法句柄,当守卫失败或调用失效时,知道如何回退。
      参数:
      guardFallback - 如果守卫返回false,则使用的回退方法句柄。
      switchpointFallback - 如果开关点失效,则使用的回退方法句柄。
      catchFallback - 如果异常处理程序触发,则使用的回退方法。
      返回:
      一个复合方法句柄。