Module jdk.dynalink
Package jdk.dynalink.linker.support
Class CompositeTypeBasedGuardingDynamicLinker
java.lang.Object
jdk.dynalink.linker.support.CompositeTypeBasedGuardingDynamicLinker
public class CompositeTypeBasedGuardingDynamicLinker extends Object implements TypeBasedGuardingDynamicLinker
一个复合的基于类型的守卫动态链接器。当遇到尚未见过类的接收者时,所有链接器都会按顺序查询它们的
TypeBasedGuardingDynamicLinker.canLinkType(Class)
方法。返回true的链接器然后绑定到该类,下次遇到相同类型的接收者时,链接将仅委托给这些链接器,加快分派速度。
-
Constructor Summary
ConstructorDescriptionCompositeTypeBasedGuardingDynamicLinker
(Iterable<? extends TypeBasedGuardingDynamicLinker> linkers) 创建一个新的复合类型为基础的链接器。 -
Method Summary
Modifier and TypeMethodDescriptionboolean
canLinkType
(Class<?> type) 如果至少有一个复合链接器从TypeBasedGuardingDynamicLinker.canLinkType(Class)
中返回true,则返回true。getGuardedInvocation
(LinkRequest linkRequest, LinkerServices linkerServices) 为调用站点上具有指定参数的特定调用创建一个受保护的调用。static List
<GuardingDynamicLinker> optimize
(Iterable<? extends GuardingDynamicLinker> linkers) 优化基于类型的链接器列表。
-
Constructor Details
-
CompositeTypeBasedGuardingDynamicLinker
public CompositeTypeBasedGuardingDynamicLinker(Iterable<? extends TypeBasedGuardingDynamicLinker> linkers) 创建一个新的复合类型为基础的链接器。- 参数:
-
linkers
- 组件链接器 - 抛出:
-
NullPointerException
- 如果linkers
或其任何元素为null。
-
-
Method Details
-
canLinkType
如果至少有一个复合链接器从TypeBasedGuardingDynamicLinker.canLinkType(Class)
中返回true,则返回true。- 指定者:
-
canLinkType
在接口TypeBasedGuardingDynamicLinker
- 参数:
-
type
- 要链接的类型 - 返回:
-
如果至少有一个复合链接器从
TypeBasedGuardingDynamicLinker.canLinkType(Class)
中返回true,则返回true,否则返回false。
-
getGuardedInvocation
public GuardedInvocation getGuardedInvocation(LinkRequest linkRequest, LinkerServices linkerServices) throws Exception 从接口中复制的描述:GuardingDynamicLinker
为调用站点上具有指定参数的特定调用创建一个受保护的调用。- 指定者:
-
getGuardedInvocation
在接口GuardingDynamicLinker
- 参数:
-
linkRequest
- 描述链接特定调用请求的对象 -
linkerServices
- 链接服务 - 返回:
-
一个带有适合参数的方法句柄的受保护调用,以及一个如果失败应触发重新链接的守卫条件。如果无法解析调用,则必须返回null。如果返回的调用是无条件的(实际上相当罕见),则返回值中的守卫可以为null。调用还可以具有任意数量的开关点,用于异步使链接失效,以及描述预期异常条件的
Throwable
子类,该条件也会触发重新链接(通常更快地依赖于不经常发生但预期的ClassCastException
,而不是始终评估的instanceof
守卫)。虽然链接器必须生成一个参数类型与链接请求的调用站点描述符中的参数类型匹配的调用,但除非可以仅通过既不失精度也不失量级的转换来匹配调用站点期望的返回类型,否则不应尝试匹配调用站点期望的返回类型,有关更多解释,请参见LinkerServices.asTypeLosslessReturn(MethodHandle, MethodType)
。 - 抛出:
-
Exception
- 如果由于任何原因操作失败
-
optimize
public static List<GuardingDynamicLinker> optimize(Iterable<? extends GuardingDynamicLinker> linkers) 优化基于类型的链接器列表。如果列表中一组相邻的链接器都实现了TypeBasedGuardingDynamicLinker
,它们将被替换为包含它们的CompositeTypeBasedGuardingDynamicLinker
的单个实例。- 参数:
-
linkers
- 要优化的链接器列表 - 返回:
- 优化后的列表
- 抛出:
-
NullPointerException
- 如果linkers
或其任何元素为null。
-