-
- All Known Subinterfaces:
-
TypeBasedGuardingDynamicLinker
public interface GuardingDynamicLinker
语言特定动态链接器的基本接口。 这样的链接器总是必须生成带有保护的方法句柄,因为调用站点处的调用的方法句柄的有效性不可避免地取决于某些条件(至少,它取决于属于链接器的语言运行时的接收器)。 语言运行时实现程序通常会将其自己语言的链接逻辑实现为一个或多个GuardingDynamicLinker
类。 他们通常将它们设置为prioritized linkers
,它们为自己配置DynamicLinkerFactory
,也可能将其设置为fallback linkers
以处理特定于语言的“未找到属性”等条件。考虑为那些基于对象的Java类的链接器实现
TypeBasedGuardingDynamicLinker
接口而不是此接口。 如果您需要实现特定于语言的类型转换,请让您的GuardingDynamicLinker
实现GuardingTypeConverterFactory
接口。语言可以使用
GuardingDynamicLinkerExporter
将链接器导出到automatic discovery
的其他语言运行时。
-
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 GuardedInvocation
getGuardedInvocation(LinkRequest linkRequest, LinkerServices linkerServices)
使用调用站点上的指定参数创建适用于特定调用的受保护调用。
-
-
-
方法详细信息
-
getGuardedInvocation
GuardedInvocation getGuardedInvocation(LinkRequest linkRequest, LinkerServices linkerServices) throws 异常
使用调用站点上的指定参数创建适用于特定调用的受保护调用。- 参数
-
linkRequest
- 描述链接特定调用请求的对象 -
linkerServices
- 链接器服务 - 结果
-
带有适合参数的方法句柄的保护调用,以及如果失败则应触发重新链接的保护条件。
如果无法解析调用,则必须返回null。
如果返回的调用是无条件的(实际上非常罕见),则返回值中的guard可以为null。
调用也可以有任意数量的切换点用于链接的异步失效,以及
Throwable
子类,它描述了一个预期的异常条件,它也触发了重新链接(通常它更快依赖于偶然但预期的ClassCastException
而不是总是评估instanceof
警卫)。 虽然链接器必须生成一个参数类型与链接请求的调用站点描述符中的参数类型匹配的调用,但它不应该尝试匹配调用站点预期的返回类型,除非它只能使用既不会失去精度的转换也没有规模,请参阅LinkerServices.asTypeLosslessReturn(MethodHandle, MethodType)
进一步解释。 - 异常
-
异常
- 如果操作因任何原因失败
-
-