Spec-Zone.ru › OpenJDK 21

Интерфейс GuardingTypeConverterFactory

public interface GuardingTypeConverterFactory
Дополнительный интерфейс, который может быть реализован GuardingDynamicLinker реализациями для предоставления функций преобразования типов, специфичных для языка. Обратите внимание, что если вы реализуете этот интерфейс, вам, скорее всего, также потребуется реализовать интерфейс ConversionComparator, так как ваши дополнительные преобразования, специфичные для языка, в отсутствие стратегии для приоритезации этих преобразований, приведут к большей неоднозначности для BeansLinker при выборе правильной перегрузки при попытке связаться с перегруженным методом Java.

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

Модификатор и тип Метод Описание
GuardedInvocation convertToType(Class<?> sourceType, Class<?> targetType, Supplier<MethodHandles.Lookup> lookupSupplier)
Возвращает преобразование защищенного типа, которое принимает значение указанного исходного типа и возвращает значение, преобразованное к указанному целевому типу.

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

convertToType

GuardedInvocation convertToType(Class<?> sourceType, Class<?> targetType, Supplier<MethodHandles.Lookup> lookupSupplier) throws Exception
Возвращает преобразование защищенного типа, которое принимает значение указанного исходного типа и возвращает значение, преобразованное к указанному целевому типу. Типы значений могут быть либо примитивными, либо ссылочными типами, включая интерфейсы, поэтому вы можете даже предоставить преобразователи для преобразования объектов вашего языка в 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).
Исключения:
Exception - если произошла ошибка при создании преобразователя
См. также:
  • LinkerServices.getWithLookup(Supplier, SecureLookupSupplier)

© 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/GuardingTypeConverterFactory.html

Spec-Zone.ru

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