模块  jdk.dynalink
软件包  jdk.dynalink.linker

Interface LinkerServices

    • 方法详细信息

      • getTypeConverter

        MethodHandle getTypeConverter​(<?> sourceType,
                                      <?> targetType)
        给定源和目标类型,返回一个在它们之间进行转换的方法句柄。 永远不会返回null; 在最坏的情况下,它将返回一个标识转换(在运行时可能会失败某些值)。 您很少需要直接使用此方法,而应主要依赖asType(MethodHandle, MethodType) 当您需要在处理链接请求的上下文之外重用现有的类型转换机制时,需要此方法。
        参数
        sourceType - 要转换的类型
        targetType - 要转换为的类型
        结果
        执行转换的方法句柄。
      • canConvert

        boolean canConvert​(<?> from,
                           <?> to)
        如果请求的类型(自动JVM转换或任何可用的GuardingTypeConverterFactory提供的转换)之间可能存在转换,则返回true;如果请求的类型之间肯定不存在转换,则返回false。 请注意,返回true并不能保证转换在运行时对所有值都成功(特别是如果“from”或“to”类型足够通用),但返回false会保证转换失败。
        参数
        from - 转换的源类型
        to - 转换的目标类型
        结果
        如果可以进行转换,则为true;如果不存在,则为false。
      • getGuardedInvocation

        GuardedInvocation getGuardedInvocation​(LinkRequest linkRequest)
                                        throws 异常
        创建一个保护的调用,该调用委托回公开此链接器服务对象的DynamicLinker 然后,动态链接器将自己委托链接到其所有托管GuardingDynamicLinker如果没有链接器更早响应,则可能包含此链接,因此请注意无限递归。 您通常会制作链接请求,以使其与您当前尝试链接的链接请求不同。
        参数
        linkRequest - 链接调用的请求
        结果
        由顶级动态链接器管理的一些保护动态链接器链接的受保护调用。 如果没有可用的链接器能够链接调用,则可以为null。 您通常会使用返回的调用的元素来组成您自己的调用。
        异常
        异常 - 如果顶级链接器抛出异常
      • compareConversion

        ConversionComparator.Comparison compareConversion​(<?> sourceType,
                                                          <?> targetType1,
                                                          <?> targetType2)
        确定从源类型到两种目标类型的两种类型转换中的哪一种是首选。 这用于动态重载方法解析。 如果源类型可以通过方法调用转换转换为恰好一个目标类型,则选择它,否则可以查阅ConversionComparator s。
        参数
        sourceType - 源类型。
        targetType1 - 一种潜在的目标类型
        targetType2 - 另一种潜在的目标类型。
        结果
        比较常数之一,确定哪些 - 如果有的话 - 目标类型更适合转换。
      • filterInternalObjects

        MethodHandle filterInternalObjects​(MethodHandle target)
        修改方法句柄,以便任何可以接收潜在内部语言运行时对象的参数都会在其上添加一个过滤器,以防止它们被包装,从而避免它们被转义。 它还可以为返回值添加一个展开过滤器。 基本上使用DynamicLinkerFactory.setInternalObjectsFilter(MethodHandleTransformer)配置的变换器转换方法句柄。
        参数
        target - 目标方法句柄
        结果
        具有参数和/或返回类型的方法句柄,可能被过滤以进行包装和解包。
      • getWithLookup

        <T> T getWithLookup​(Supplier<T> operation,
                            SecureLookupSupplier lookupSupplier)
        在特定的MethodHandles.Lookup查找对象的上下文中执行操作。 通常, LinkerServices上的方法作为链接机制的一部分被调用,在这种情况下,Dynalink内部维护每线程当前查找(属于被链接的调用站点的描述符的查找)。 如果需要生成查找敏感转换器,则任何参与链接的GuardingTypeConverterFactory都可以检索此查找。 但是,在实现调用时调度方案,在运行时调用转换等时,链接器服务的方法也可以在链接过程之外调用。如果在这种情况下需要使用任何类型转换器,并且需要查找,它将通常只获得MethodHandles.publicLookup()因为线程没有参与链接操作。 如果有一种方法可以将操作有意义地关联到某个调用者类的上下文,请考虑在此方法的调用中执行它并为该类传递全强度查找,因为它会将该查找与当前线程关联持续时间。 请注意,由于您传递的是SecureLookupSupplier ,因此任何调用的类型转换器工厂仍需要保留必要的运行时权限,以便能够在需要时进行查找。
        参数类型
        T - 传入供应商提供的返回值的类型。
        参数
        operation - 在指定查找的上下文中执行的操作。
        lookupSupplier - 查找的安全供应商
        结果
        动作的返回值
        异常
        NullPointerException - 如果action或lookupSupplier为null。
        另请参见:
        GuardingTypeConverterFactory.convertToType(Class, Class, Supplier)