Module jdk.dynalink

Interface GuardingDynamicLinker

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

public interface GuardingDynamicLinker
语言特定动态链接器的基本接口。这样的链接器必须始终生成带有保护的方法句柄,因为方法句柄在调用点的有效性不可避免地取决于某些条件(至少取决于接收者是否属于链接器的语言运行时)。语言运行时实现者通常会实现自己语言的链接逻辑作为一个或多个GuardingDynamicLinker类。他们通常会将它们设置为他们自己配置的DynamicLinkerFactory中的优先链接器,也可能将一些设置为回退链接器来处理特定于语言的“属性未找到”等条件。

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

语言可以通过自动发现将链接器导出到其他语言运行时,使用GuardingDynamicLinkerExporter

  • Method Details

    • getGuardedInvocation

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