-
public interface GuardingTypeConverterFactory
可选的接口,可由GuardingDynamicLinker
实现实现,以提供特定于语言的类型转换功能。 请注意,如果您实现此接口,您很可能也希望实现ConversionComparator
接口,因为在没有优先处理这些转换的策略的情况下,您的其他语言特定转换将导致BeansLinker
在尝试选择正确的重载时更加模糊链接到重载的Java方法。
-
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 GuardedInvocation
convertToType(类<?> sourceType, 类<?> targetType, Supplier<MethodHandles.Lookup> lookupSupplier)
返回一个受保护的类型转换,它接收指定源类型的值并返回转换为指定目标类型的值。
-
-
-
方法详细信息
-
convertToType
GuardedInvocation convertToType(类<?> sourceType, 类<?> targetType, Supplier<MethodHandles.Lookup> lookupSupplier) throws 异常
返回一个受保护的类型转换,它接收指定源类型的值并返回转换为指定目标类型的值。 值类型可以是基元或引用类型,包括接口,因此您甚至可以通过为它们生成适配器来提供转换器,以将语言的对象转换为Java接口和类。调用的类型是
(sourceType)→targetType
,而防护的类型是(sourceType)→boolean
。 如果源类型特定于运行时和运行时,则允许您返回无条件调用(没有保护)。请注意,永远不会为
method invocation conversions
调用此方法,因为MethodHandle.asType(MethodType)
可以自动应用这些方法 。 实现可以假设从不请求为这些转换生成转换器。 如果语言运行库需要自定义方法调用转换,则应改为set an autoconversion strategy in the dynamic linker factory
。Dynalink可以自行缓存一些返回的转换器,或者重复请求转换器工厂创建相同的转换。
- 参数
-
sourceType
- 源类型 -
targetType
- 目标类型。 -
lookupSupplier
- 用于检索请求类型转换器的类的查找的供应商。 当请求转换器作为链接invokedynamic
指令的一部分时,供应商将返回传递给bootstrap方法的查找,否则如果从LinkerServices.getWithLookup(Supplier, jdk.dynalink.SecureLookupSupplier)
内调用该方法,它将委托给安全查找供应商。 在任何其他情况下,它将返回公共查找。 可能需要查找的典型情况是转换器动态创建Java适配器类(例如,将某些对象从动态语言转换为Java接口以实现互操作性)。 在通过的供应商上调用Supplier.get()
方法将受到与SecureLookupSupplier.getLookup()
相同的安全检查。 如果不需要,实现应避免检索查找,以避免花费AccessController.doPrivileged
调用。 - 结果
- 一个受保护的调用,可以获取一个对象(如果它通过后卫)并返回另一个对象,该对象被强制转换为目标类型。 如果工厂确定它无法处理转换,它可以返回null。 如果工厂确定它始终可以处理转换,它可以返回无条件调用(其警戒为空)。
- 异常
-
异常
- 如果在创建转换器期间出错 - 另请参见:
-
LinkerServices.getWithLookup(Supplier, SecureLookupSupplier)
-
-