模块 jdk.dynalink

接口 GuardingDynamicLinker

所有已知的子接口:
TypeBasedGuardingDynamicLinker
所有已知的实现类:
BeansLinker , CompositeGuardingDynamicLinker , CompositeTypeBasedGuardingDynamicLinker

public interface GuardingDynamicLinker
特定于语言的动态链接器的基本接口。这样的链接器总是必须生成带有守卫的方法句柄,因为在调用站点调用的方法句柄的有效性不可避免地取决于某些条件(至少,它取决于属于链接器语言运行时的接收器)。语言运行时实现者通常会将他们自己的语言的链接逻辑实现为一个或多个 GuardingDynamicLinker 类。他们通常会在他们为自己配置的 DynamicLinkerFactory 中将它们设置为 prioritized linkers ,并且可能还将一些设置为 fallback linkers 以处理特定于语言的“找不到属性”等条件。

考虑为那些基于对象的 Java 类的链接器实现 TypeBasedGuardingDynamicLinker 接口而不是此接口。如果您需要实现特定于语言的类型转换,请让您的 GuardingDynamicLinker 也实现 GuardingTypeConverterFactory 接口。

语言可以使用 GuardingDynamicLinkerExporter 将链接器导出到 automatic discovery 的其他语言运行时。

  • 方法详情

    • getGuardedInvocation

      GuardedInvocation  getGuardedInvocation(LinkRequest  linkRequest, LinkerServices  linkerServices) throws Exception
      在调用站点使用指定参数创建适用于特定调用的受保护调用。
      参数:
      linkRequest - 描述链接特定调用请求的对象
      linkerServices - 链接器服务
      返回:
      带有适合参数的方法句柄的受保护调用,以及如果失败应触发重新链接的保护条件。如果无法解析调用,则必须返回 null。如果返回的调用是无条件的(这实际上很少见),则返回值中的守卫可以为 null。调用也可以有任意数量的开关点用于链接的异步失效,以及一个 Throwable 子类,它描述了一个预期的异常条件,它也会触发重新链接(通常依赖一个不常见但预期的 ClassCastException 比总是更快评估了 instanceof 守卫)。虽然链接器必须生成一个调用,其参数类型与链接请求的调用站点描述符中的参数类型相匹配,但它不应尝试匹配调用站点预期的返回类型,除非它可以仅通过不丢失任何精度的转换来实现也不是幅度,请参阅 LinkerServices.asTypeLosslessReturn(MethodHandle, MethodType) 以获取更多说明。
      抛出:
      Exception - 如果操作因任何原因失败