Spec-Zone.ru › OpenJDK 17

Класс BeansLinker

java.lang.Object
jdk.dynalink.beans.BeansLinker
Все реализованные интерфейсы:
GuardingDynamicLinker
public class BeansLinker extends Object implements GuardingDynamicLinker
Обработчик обычных Java-объектов. Обычно используется в качестве конечного обработчика по умолчанию для 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(MissingMemberHandlerFactory missingMemberHandlerFactory)
Создает новый обработчик бинов с указанным фабричным методом для создания обработчиков отсутствующих членов.

Краткое описание методов

Модификатор и тип Метод Описание
static Object getConstructorMethod(Class<?> clazz, String signature)
Возвращает динамический метод конструктора заданного класса и заданной подписи.
GuardedInvocation getGuardedInvocation(LinkRequest request, LinkerServices linkerServices)
Создает защищённый вызов, подходящий для конкретного вызова со специфицированными аргументами в вызывающей точке.
static Set<String> getInstanceMethodNames(Class<?> clazz)
Возвращает набор имён всех методов экземпляра класса.
TypeBasedGuardingDynamicLinker getLinkerForClass(Class<?> clazz)
Возвращает обработчик бинов для конкретного класса.
static Set<String> getReadableInstancePropertyNames(Class<?> clazz)
Возвращает набор имён всех читаемых свойств экземпляра класса.
static Set<String> getReadableStaticPropertyNames(Class<?> clazz)
Возвращает набор имён всех читаемых статических свойств класса.
static Set<String> getStaticMethodNames(Class<?> clazz)
Возвращает набор имён всех статических методов класса.
static Set<String> getWritableInstancePropertyNames(Class<?> clazz)
Возвращает набор имён всех записываемых свойств экземпляра класса.
static Set<String> getWritableStaticPropertyNames(Class<?> clazz)
Возвращает набор имён всех записываемых статических свойств класса.
static boolean isDynamicConstructor(Object obj)
Возвращает true, если объект является конструктором Java (полученный через getConstructorMethod(Class, String)).
static boolean isDynamicMethod(Object obj)
Возвращает true, если объект является динамическим методом Java (например, полученным через операцию GET:METHOD над объектом Java или StaticClass или через getConstructorMethod(Class, String)).

Методы, унаследованные от класса java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание конструкторов

BeansLinker

public BeansLinker()
Создаёт новый обработчик связей между объектами. Эквивалентно BeansLinker(MissingMemberHandlerFactory) с null в качестве фабрики обработчиков для отсутствующих членов, что приводит к стандартному поведению при работе с отсутствующими членами.

BeansLinker

public BeansLinker(MissingMemberHandlerFactory missingMemberHandlerFactory)
Создаёт новый обработчик связей с заданной фабрикой для создания обработчиков для отсутствующих членов. Переданная фабрика может быть равна null, если достаточно стандартного поведения. Подробности см. в MissingMemberHandlerFactory.
Параметры:
missingMemberHandlerFactory - фабрика для создания обработчиков для операций с отсутствующими членами.

Подробное описание методов

getLinkerForClass

public TypeBasedGuardingDynamicLinker getLinkerForClass(Class<?> clazz)
Возвращает обработчик связей для конкретного класса. Полезно, когда вам нужно переопределить или расширить поведение связывания для некоторых классов в обработчике связей вашей среды выполнения языка, но по-прежнему хотите делегировать стандартному поведению в некоторых случаях.
Параметры:
clazz - класс
Возвращает:
обработчик связей для этого класса

isDynamicMethod

public static boolean isDynamicMethod(Object obj)
Возвращает true, если объект является динамическим методом Java (например, полученным через операцию GET:METHOD над объектом Java или StaticClass или через getConstructorMethod(Class, String).
Параметры:
obj - объект, который мы хотим проверить на предмет того, является ли он динамическим методом Java.
Возвращает:
true, если это динамический метод, false в противном случае.

isDynamicConstructor

public static boolean isDynamicConstructor(Object obj)
Возвращает true, если объект является конструктором Java (полученным через getConstructorMethod(Class, String)).
Параметры:
obj - объект, который мы хотим проверить на предмет того, является ли он конструктором Java.
Возвращает:
true, если это конструктор, false в противном случае.

getConstructorMethod

public static Object getConstructorMethod(Class<?> clazz, String signature)
Возвращает динамический метод конструктора заданного класса и заданной сигнатуры. Этот метод полезен для реализации функциональности выбора перегруженного конструктора на основе явной сигнатуры, поскольку эта функциональность не предоставляется Dynalink, так как объекты 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API