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

Interface LinkerServices

    • 方法详细信息

      • getTypeConverter

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

        boolean canConvert​(Class<?> from,
                           Class<?> 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​(Class<?> sourceType,
                                                          Class<?> targetType1,
                                                          Class<?> targetType2)
        确定从源类型到两种目标类型的两种类型转换中的哪一种是首选。 这用于动态重载方法的分辨率。 如果源类型可以通过方法调用转换转换为正好一个目标类型,则会被选择,否则可以查询ConversionComparator
        参数
        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 - 如果动作或lookupSupplier都为空。
        另请参见:
        GuardingTypeConverterFactory.convertToType(Class, Class, Supplier)