Интерфейс GuardingTypeConverterFactory
public interface GuardingTypeConverterFactory
GuardingDynamicLinker для предоставления возможностей преобразования типов, специфичных для языка. Обратите внимание, что если вы реализуете этот интерфейс, вам, скорее всего, потребуется также реализовать интерфейс ConversionComparator, поскольку ваши дополнительные преобразования, специфичные для языка, в отсутствие стратегии для приоритизации этих преобразований, приведут к большей неоднозначности для BeansLinker при выборе правильной перегрузки при попытке связать перегруженный Java-метод.Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
GuardedInvocation |
convertToType |
Возвращает защищенное преобразование типов, которое принимает значение указанного типа источника и возвращает значение, преобразованное в указанный целевой тип. |
Подробное описание методов
convertToType
GuardedInvocation convertToType(Class<?> sourceType, Class<?> targetType, Supplier<MethodHandles.Lookup> lookupSupplier) throws Exception
Тип вызова — (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- если при создании преобразователя произошла ошибка - См. также:
© 1993, 2021, 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/17/docs/api/jdk.dynalink/jdk/dynalink/linker/GuardingTypeConverterFactory.html