Интерфейс 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, 2020, 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/11/docs/api/jdk.dynalink/jdk/dynalink/linker/GuardingTypeConverterFactory.html

Spec-Zone .ru
спецификации, руководства, описания, API