Spec-Zone.ru › OpenJDK 24

Класс 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, а не ослабленные lookup или общедоступный lookup.

Поведение при обработке отсутствующих членов можно настроить, передав MissingMemberHandlerFactory в constructor.

Класс также предоставляет различные методы для обнаружения доступных имен свойств и методов в классах и экземплярах классов, а также доступ к линкерам по классам с помощью метода getLinkerForClass(Class).

C момента:
9

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

Конструктор Описание
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, 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

Spec-Zone.ru

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