Класс BeansLinker
- Все реализованные интерфейсы:
GuardingDynamicLinker
public class BeansLinker extends Object implements GuardingDynamicLinker
DynamicLinkerFactory, чтобы предоставить возможность связать вызовы к объектам, которые не распознаны другими линкерами. В частности, этот линкер будет: - если объект является
record, экспонировать все публичные методы-аксессоры компонентов записи в качестве геттеров свойств для операцийStandardOperation.GETв пространстве имёнStandardNamespace.PROPERTY; - экспонировать все публичные методы формы
setXxx(),getXxx()иisXxx()в качестве сетеров и геттеров для операцийStandardOperation.SETиStandardOperation.GETв пространстве имёнStandardNamespace.PROPERTY, за исключением геттеров для свойств с именами, уже обработанными геттерами компонентов записи; - экспонировать все публичные методы для извлечения для операции
StandardOperation.GETв пространстве имёнStandardNamespace.METHOD; полученные таким образом методы затем могут быть вызваны с помощьюStandardOperation.CALL. - экспонировать все публичные поля в качестве свойств, если нет геттеров или сетеров для свойств с такими же именами;
- экспонировать элементы нативных Java-массивов,
ListиMapобъектов в качестве операцийStandardOperation.GETиStandardOperation.SETв пространстве имёнStandardNamespace.ELEMENT; - экспонировать удаление элементов
ListиMapобъектов в качестве операцииStandardOperation.REMOVEв пространстве имёнStandardNamespace.ELEMENT; - экспонировать виртуальное свойство, названное
length, для Java-массивов,CollectionиMapобъектов; - экспонировать
StandardOperation.NEWдля экземпляровStaticClassв качестве вызовов конструкторов, включая те статические классы, которые представляют Java-массивы (их конструкторы принимают одинintпараметр, представляющий длину создаваемого массива); - экспонировать статические методы, поля и свойства классов аналогичным образом, как экспонируются методы, поля и свойства экземпляров, для объектов
StaticClass. - экспонировать виртуальное свойство, названное
static, для экземпляровClassдля доступа к ихStaticClass.
Разрешение перегруженных методов выполняется автоматически для сетеров, методов и конструкторов свойств. Кроме того, ручное разрешение перегруженных методов поддерживается при указании вызывающим участком имени метода, содержащего явную сигнатуру, например, StandardOperation.GET.withNamespace(METHOD).named("parseInt(String,int)"). Вы можете использовать имена классов без указания пакета в таких сигнатурах, они будут соответствовать любому классу с таким же именем без пакета. Вы должны использовать только полное имя класса в случае неоднозначности при выборе между именами классов без пакета (что крайне маловероятно). Автоматическое разрешение перегрузки для конструкторов не выполняется, так как нет логичного места для добавления этой функциональности, но если язык хочет предоставить эту функциональность, он может использовать getConstructorMethod(Class, String) в качестве полезного строительного блока.
Вызов с переменным числом аргументов обрабатывается как для методов, так и для конструкторов.
Методы, чувствительные к вызывающему участку, могут быть связаны, если они являются общедоступными и запросы на связывание содержат описания вызывающего участка, несущие полные объекты MethodHandles.Lookup, а не ослабленные lookup или общедоступный lookup.
Поведение при обработке отсутствующих членов можно настроить, передав MissingMemberHandlerFactory в constructor.
Класс также предоставляет различные методы для обнаружения доступных имен свойств и методов в классах и экземплярах классов, а также доступ к линкерам по классам с помощью метода getLinkerForClass(Class).
- C момента:
- 9
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
BeansLinker() |
Создаёт новый линкер бинов. |
BeansLinker |
Создаёт новый линкер бинов с указанным фабрикой для создания обработчиков отсутствующих членов. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static Object |
getConstructorMethod |
Возвращает динамический метод конструктора заданного класса и заданной сигнатуры. |
GuardedInvocation |
getGuardedInvocation |
Создаёт защищённый вызов, подходящий для конкретного вызова с указанными аргументами в вызывающем участке. |
static Set |
getInstanceMethodNames |
Возвращает набор имён всех методов экземпляра класса. |
TypeBasedGuardingDynamicLinker |
getLinkerForClass |
Возвращает линкер бинов для конкретного класса. |
static Set |
getReadableInstancePropertyNames |
Возвращает набор имён всех читаемых свойств экземпляра класса. |
static Set |
getReadableStaticPropertyNames |
Возвращает набор имён всех читаемых статических свойств класса. |
static Set |
getStaticMethodNames |
Возвращает набор имён всех статических методов класса. |
static Set |
getWritableInstancePropertyNames |
Возвращает набор имён всех записываемых свойств экземпляра класса. |
static Set |
getWritableStaticPropertyNames |
Возвращает набор имён всех записываемых статических свойств класса. |
static boolean |
isDynamicConstructor |
Возвращает true, если объект является Java-конструктором (полученным с помощью getConstructorMethod(Class, String)}. |
static boolean |
isDynamicMethod |
Возвращает true, если объект является динамическим методом Java (например, полученным через операцию GET:METHOD над объектом Java или StaticClass, или через getConstructorMethod(Class, String). |
Подробное описание конструкторов
BeansLinker
public BeansLinker()
BeansLinker(MissingMemberHandlerFactory) с null в качестве фабрики обработчиков отсутствующих членов, что обеспечивает стандартное поведение для связывания и обработки отсутствующих членов.BeansLinker
public BeansLinker(MissingMemberHandlerFactory missingMemberHandlerFactory)
MissingMemberHandlerFactory.- Параметры:
-
missingMemberHandlerFactory- фабрика для создания обработчиков операций с отсутствующими членами.
Подробное описание методов
getLinkerForClass
public TypeBasedGuardingDynamicLinker getLinkerForClass(Class<?> clazz)
- Параметры:
-
clazz- класс - Возвращает:
- обработчик связей для данного класса
isDynamicMethod
public static boolean isDynamicMethod(Object obj)
GET:METHOD над объектом Java или StaticClass или через getConstructorMethod(Class, String).- Параметры:
-
obj- объект, который мы хотим проверить на соответствие динамическому методу Java. - Возвращает:
- true, если это динамический метод, иначе false.
isDynamicConstructor
public static boolean isDynamicConstructor(Object obj)
getConstructorMethod(Class, String)).- Параметры:
-
obj- объект, который мы хотим проверить на соответствие конструктору Java. - Возвращает:
- true, если это конструктор, иначе false.
getConstructorMethod
public static Object getConstructorMethod(Class<?> clazz, String signature)
StaticClass действуют как перегруженные конструкторы без явного выбора сигнатуры. Пример использования: getConstructorMethod(java.awt.Color.class, "int, int, int").- Параметры:
-
clazz- класс -
signature- полная сигнатура конструктора. Обратите внимание, как вы можете использовать имена примитивных типов, имена массивов с обычной нотацией Java (например,"int[]"), а также обычно можно использовать даже имена классов без квалификатора (например,"String, List"вместо"java.lang.String, java.util.List", пока это не вызывает неоднозначности в конкретной позиции параметра). - Возвращает:
- динамический метод для конструктора или null, если конструктор с указанной сигнатурой не существует.
getReadableInstancePropertyNames
public static Set<String> getReadableInstancePropertyNames(Class<?> clazz)
- Параметры:
-
clazz- класс - Возвращает:
- набор имён всех читаемых свойств экземпляров класса.
getWritableInstancePropertyNames
public static Set<String> getWritableInstancePropertyNames(Class<?> clazz)
- Параметры:
-
clazz- класс - Возвращает:
- набор имён всех записываемых свойств экземпляров класса.
getInstanceMethodNames
public static Set<String> getInstanceMethodNames(Class<?> clazz)
- Параметры:
-
clazz- класс - Возвращает:
- набор имён всех методов экземпляров класса.
getReadableStaticPropertyNames
public static Set<String> getReadableStaticPropertyNames(Class<?> clazz)
- Параметры:
-
clazz- класс - Возвращает:
- набор имён всех читаемых статических свойств класса.
getWritableStaticPropertyNames
public static Set<String> getWritableStaticPropertyNames(Class<?> clazz)
- Параметры:
-
clazz- класс - Возвращает:
- набор имён всех записываемых статических свойств класса.
getStaticMethodNames
public static Set<String> getStaticMethodNames(Class<?> clazz)
- Параметры:
-
clazz- класс - Возвращает:
- набор имён всех статических методов класса.
getGuardedInvocation
public GuardedInvocation getGuardedInvocation(LinkRequest request, LinkerServices linkerServices) throws Exception
GuardingDynamicLinker- Определено в:
-
getGuardedInvocationв интерфейсеGuardingDynamicLinker - Параметры:
-
request- объект, описывающий запрос на связывание конкретного вызова -
linkerServices- сервисы связывания - Возвращает:
- защищённый вызов с дескриптором метода, подходящим для аргументов, а также условием защиты, которое, если не выполняется, должно инициировать повторное связывание. Должен вернуть null, если вызов не может быть разрешён. Если возвращаемый вызов безусловен (что на самом деле довольно редко), условие защиты в возвращаемом значении может быть null. Вызов также может иметь любое количество точек переключения для асинхронной проверки корректности связывания, а также подкласс
Throwable, который описывает ожидаемое состояние исключения, которое также инициирует повторное связывание (часто быстрее полагаться на редкое, но ожидаемоеClassCastException, чем на всегда оцениваемоеinstanceofусловие защиты). В то время как обработчик связей должен генерировать вызов с типами параметров, соответствующими описателю точки вызова запроса на связывание, он не должен пытаться сопоставить ожидаемый тип возвращаемого значения в точке вызова, за исключением случаев, когда это можно сделать только с преобразованиями, которые не теряют ни точности, ни величины, см.LinkerServices.asTypeLosslessReturn(MethodHandle, MethodType)для получения дополнительной информации. - Исключения:
-
Exception- если операция завершается неудачно по какой-либо причине
© 1993, 2025, 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://download.java.net/java/early_access/jdk24/docs/api/jdk.dynalink/jdk/dynalink/beans/BeansLinker.html