Spec-Zone.ru › OpenJDK 21

Интерфейс LinkerServices

public interface LinkerServices
Интерфейс для служб, предоставляемых экземплярам GuardingDynamicLinker объектом DynamicLinker, который их владеет.

Краткое описание методов

Модификатор и тип Метод Описание
MethodHandle asType(MethodHandle handle, MethodType fromType)
Аналогично MethodHandle.asType(MethodType), но также подключает обработчики методов, созданные всеми доступными реализациями GuardingTypeConverterFactory, обеспечивая языкоспецифическую привязку типов параметров.
default MethodHandle asTypeLosslessReturn(MethodHandle handle, MethodType fromType)
Аналогично asType(MethodHandle, MethodType), но обрабатывает преобразование типа возвращаемого значения специально.
boolean canConvert(Class<?> from, Class<?> to)
Возвращает true, если может существовать преобразование между запрошенными типами (либо автоматическое преобразование JVM, либо преобразование, предоставляемое любым доступным GuardingTypeConverterFactory), или false, если определённо нет преобразования между запрошенными типами.
ConversionComparator.Comparison compareConversion(Class<?> sourceType, Class<?> targetType1, Class<?> targetType2)
Определяет, какое из двух преобразований типа из исходного типа в два целевых типа предпочтительнее.
MethodHandle filterInternalObjects(MethodHandle target)
Изменяет обработчик методов так, чтобы любые параметры, которые могут получать потенциально внутренние объекты выполнения языка, имели добавленный фильтр, предотвращающий их утечку, возможно, путём их обертывания.
GuardedInvocation getGuardedInvocation(LinkRequest linkRequest)
Создаёт защищённое вызов, делегируемое обратно объекту DynamicLinker, который экспонирует этот объект услуг линкера.
MethodHandle getTypeConverter(Class<?> sourceType, Class<?> targetType)
На основе исходного и целевого типа возвращает обработчик методов, преобразующий между ними.
<T> T getWithLookup(Supplier<T> operation, SecureLookupSupplier lookupSupplier)
Выполняет операцию в контексте конкретного объекта поиска MethodHandles.Lookup.

Подробное описание методов

asType

MethodHandle asType(MethodHandle handle, MethodType fromType)
Аналогично MethodHandle.asType(MethodType), но также подключает обработчики методов, созданные всеми доступными реализациями GuardingTypeConverterFactory, обеспечивая специфичную для языка кодирование типов параметров. Он будет применять MethodHandle.asType(MethodType) для всех преобразований примитив-примитив, обёртка-примитив, примитив-обёртка, а также для всех расширений. Для всех остальных преобразований он вставит MethodHandles.filterArguments(MethodHandle, int, MethodHandle...) с составными фильтрами, предоставляемыми реализациями GuardingTypeConverterFactory.
Параметры:
handle - целевой обработчик метода
fromType - типы исходных аргументов
Возвращает:
обработчик метода, являющийся подходящей комбинацией MethodHandle.asType(MethodType), MethodHandles.filterArguments(MethodHandle, int, MethodHandle...) и MethodHandles.filterReturnValue(MethodHandle, MethodHandle) с преобразователями типов, созданными GuardingTypeConverterFactory, в качестве фильтров.

asTypeLosslessReturn

default MethodHandle asTypeLosslessReturn(MethodHandle handle, MethodType fromType)
Аналогично asType(MethodHandle, MethodType), за исключением того, что он специально обрабатывает преобразование типа возвращаемого значения. Он преобразует тип возвращаемого значения обработчика метода только в том случае, если это можно сделать с помощью преобразования, не теряющего ни точности, ни величины, в противном случае он оставляет его неизменным. Это единственные преобразования возвращаемого значения, которые должны выполняться индивидуальными линкерами, специфичными для языка, и pre-link transformer of the dynamic linker должен реализовать стратегию обработки потенциально потери точности преобразований типа возвращаемого значения способом, специфичным для среды выполнения языка, в которой находится место вызова.
Параметры:
handle - целевой обработчик метода
fromType - типы исходных аргументов
Возвращает:
обработчик метода, являющийся подходящей комбинацией MethodHandle.asType(MethodType) и MethodHandles.filterArguments(MethodHandle, int, MethodHandle...) с преобразователями типов, созданными GuardingTypeConverterFactory, в качестве фильтров.

getTypeConverter

MethodHandle getTypeConverter(Class<?> sourceType, Class<?> targetType)
Принимая исходный и целевой тип, возвращает обработчик метода, который преобразует между ними. Никогда не возвращает null; в худшем случае он вернёт преобразование тождества (которое может потерпеть неудачу для некоторых значений во время выполнения). Вам редко нужно использовать этот метод напрямую и вы, в основном, должны полагаться на asType(MethodHandle, MethodType) вместо этого. Этот метод необходим, когда вам нужно повторно использовать существующую механику преобразования типов за пределами контекста обработки запроса связи.
Параметры:
sourceType - тип для преобразования
targetType - тип для преобразования в
Возвращает:
обработчик метода, выполняющий преобразование.

canConvert

boolean canConvert(Class<?> from, Class<?> to)
Возвращает true, если может существовать преобразование между запрошенными типами (либо автоматическое JVM-преобразование, либо предоставленное любыми доступными реализациями GuardingTypeConverterFactory), или false, если определённо не существует преобразования между запрошенными типами. Обратите внимание, что возвращение true не гарантирует, что преобразование будет успешным во время выполнения для всех значений (особенно если типы «из» или «в» достаточно универсальны), но возвращение false гарантирует, что оно потерпит неудачу.
Параметры:
from - исходный тип для преобразования
to - целевой тип для преобразования
Возвращает:
true, если преобразование возможно, false, если нет.

getGuardedInvocation

GuardedInvocation getGuardedInvocation(LinkRequest linkRequest) throws Exception
Создаёт защищённый вызов, делегирующий обратно DynamicLinker, который экспонирует этот объект сервисов линкера. Динамический линкер затем сам делегирует связывание всем управляемым GuardingDynamicLinker включая, потенциально, этот, если ни один линкер не отреагирует раньше, так что будьте осторожны с рекурсией. Вы, как правило, создаёте запрос связи таким образом, чтобы он отличался от того, который вы пытаетесь связать в данный момент.
Параметры:
linkRequest - запрос связи вызова
Возвращает:
защищённый вызов, связанный некоторыми защищёнными динамическими линкерами, управляемыми динамическим линкером верхнего уровня. Может быть null, если ни один доступный линкер не может связать вызов. Обычно вы будете использовать элементы возвращённого вызова, чтобы составить свой собственный вызов.
Исключения:
Exception - в случае, если линкер верхнего уровня сгенерирует исключение

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 равны null.
См. также:
  • GuardingTypeConverterFactory.convertToType(Class, Class, Supplier)

© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/jdk.dynalink/jdk/dynalink/linker/LinkerServices.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API