模块 jdk.dynalink

类 GuardedInvocation

java.lang.Object
jdk.dynalink.linker.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, MethodHandle  guard)
      使用保护方法句柄创建一个新的保护调用。
      参数:
      invocation - 表示调用的方法句柄。不得为空。
      guard - 表示守卫的方法句柄。根据 MethodHandles.guardWithTest(MethodHandle, MethodHandle, MethodHandle) 必须与 invocation 句柄兼容。对于一些有用的守卫,请查看 Guards 类。它可以为 null 以表示无条件调用。
      抛出:
      NullPointerException - 如果调用为空。
    • GuardedInvocation

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

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

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

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

      public SwitchPoint [] getSwitchPoints()
      返回可用于使此调用句柄的链接无效的切换点。
      返回:
      可用于使此调用句柄的链接无效的切换点。可以为空。
    • getException

      public Class <? extends Throwable > getException()
      返回异常类型,如果调用抛出该异常类型,则应使此受保护调用的链接无效。
      返回:
      如果抛出应该用于使链接无效的异常类型。可以为空。
    • 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) 应用于它的调用和它的守卫,如果它有一个(返回类型更改为boolean,并且参数计数可能被守卫截断)。如果调用已经是所需类型,则返回此对象。
      参数:
      newType - 新的调用类型。
      返回:
      应用了新类型的受保护调用。
    • asType

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

      public GuardedInvocation  asTypeSafeReturn(LinkerServices  linkerServices, MethodType  newType)
      更改调用的类型,就好像 LinkerServices.asTypeLosslessReturn(MethodHandle, MethodType) 应用于它的调用,LinkerServices.asType(MethodHandle, MethodType) 应用于它的守卫,如果它有一个(返回类型更改为boolean,并且参数计数可能被守卫截断)。如果调用未更改其类型,则返回此对象。
      参数:
      linkerServices - 用于转换的链接器服务
      newType - 新的调用类型。
      返回:
      应用了新类型的受保护调用。
    • asType

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

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

      public GuardedInvocation  dropArguments(int pos, List <Class <?>> valueTypes)
      使用 MethodHandles.dropArguments(MethodHandle, int, List) 进行调用,在调用和守卫(如果它存在并且至少具有 pos 参数)中删除参数。
      参数:
      pos - 被丢弃的第一个参数的位置
      valueTypes - 被丢弃的值的类型
      返回:
      删除参数的调用
    • dropArguments

      public GuardedInvocation  dropArguments(int pos, Class <?>... valueTypes)
      使用 MethodHandles.dropArguments(MethodHandle, int, Class...) 进行调用,在调用和守卫(如果它存在并且至少具有 pos 参数)中删除参数。
      参数:
      pos - 被丢弃的第一个参数的位置
      valueTypes - 被丢弃的值的类型
      返回:
      删除参数的调用
    • compose

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

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