Класс 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 объекты, а не ослабленные обработчики вызовов или общедоступный обработчик вызовов.
Поведение обработки отсутствующих членов может быть настраиваемо посредством передачи MissingMemberHandlerFactory в constructor.
Класс также предоставляет различные методы для обнаружения доступных имен свойств и методов в классах и экземплярах классов, а также доступ к обработчикам для каждого класса с помощью метода getLinkerForClass(Class).
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
BeansLinker() |
Создает новый обработчик бинов. |
BeansLinker |
Создает новый обработчик бинов с указанным фабричным методом для создания обработчиков отсутствующих членов. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static Object |
getConstructorMethod |
Возвращает динамический метод конструктора заданного класса и заданной подписи. |
GuardedInvocation |
getGuardedInvocation |
Создает защищённый вызов, подходящий для конкретного вызова со специфицированными аргументами в вызывающей точке. |
static Set<String> |
getInstanceMethodNames |
Возвращает набор имён всех методов экземпляра класса. |
TypeBasedGuardingDynamicLinker |
getLinkerForClass |
Возвращает обработчик бинов для конкретного класса. |
static Set<String> |
getReadableInstancePropertyNames |
Возвращает набор имён всех читаемых свойств экземпляра класса. |
static Set<String> |
getReadableStaticPropertyNames |
Возвращает набор имён всех читаемых статических свойств класса. |
static Set<String> |
getStaticMethodNames |
Возвращает набор имён всех статических методов класса. |
static Set<String> |
getWritableInstancePropertyNames |
Возвращает набор имён всех записываемых свойств экземпляра класса. |
static Set<String> |
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, 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/beans/BeansLinker.html