Интерфейс 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, 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