Module  jdk.dynalink
软件包  jdk.dynalink.linker

Interface GuardingTypeConverterFactory



  • public interface GuardingTypeConverterFactory
    可选接口,可以由GuardingDynamicLinker实现来实现,以提供特定于语言的类型转换功能。 请注意,如果您实现此接口,那么您很可能希望实现ConversionComparator接口,因为您的其他特定于语言的转换,如果没有用于优先排序这些转换的策略,将会导致BeansLinker在尝试中选择正确的超载时更加模棱两可链接到重载的Java方法。
    • 方法详细信息

      • 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)