Spec-Zone.ru › OpenJDK 21

Класс 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, 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/beans/BeansLinker.html

Spec-Zone.ru

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