-
public interface GuardingTypeConverterFactory
可选接口,可以由GuardingDynamicLinker
实现来实现,以提供特定于语言的类型转换功能。 请注意,如果您实现此接口,那么您很可能希望实现ConversionComparator
接口,因为您的其他特定于语言的转换,如果没有用于优先排序这些转换的策略,将会导致BeansLinker
在尝试中选择正确的超载时更加模棱两可链接到重载的Java方法。
-
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 GuardedInvocation
convertToType(Class<?> sourceType, Class<?> targetType, Supplier<MethodHandles.Lookup> lookupSupplier)
返回受保护的类型转换,它接收指定的源类型的值,并返回转换为指定的目标类型的值。
-
-
-
方法详细信息
-
convertToType
GuardedInvocation convertToType(Class<?> sourceType, Class<?> 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
指令的一部分时,供应商将返回传递给引导方法的查找,否则如果从LinkerServices.getWithLookup(Supplier, jdk.dynalink.SecureLookupSupplier)
中调用该方法,它将委托给安全查找供应商。 在任何其他情况下,它将返回公共查找。 可能需要查找的典型情况是当转换器即时创建Java适配器类(例如,将一些对象从动态语言转换为Java接口以实现互操作性)。 在通过的供应商上调用Supplier.get()
方法将受到与SecureLookupSupplier.getLookup()
相同的安全检查。 如果不需要,实现应避免检索查找,以避免AccessController.doPrivileged
调用的费用。 - 结果
- 一个被保护的调用,可以采取一个对象(如果它通过保护),并返回另一个对象,它的表示强制到目标类型。 如果工厂确定它无法处理转换,它可以返回null。 如果工厂确定它总是可以处理转换,它可以返回一个无条件的调用(一个保护为null)。
- 异常
-
异常
- 如果在创建转换器期间有错误 - 另请参见:
-
LinkerServices.getWithLookup(Supplier, SecureLookupSupplier)
-
-