Класс 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) для доступа к связывателям отдельных классов.
- Начиная с версии:
- 9
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
BeansLinker() |
Создаёт новый связыватель beans. |
BeansLinker |
Создаёт новый связыватель beans с указанной фабрикой для создания обработчиков отсутствующих элементов. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static Object |
getConstructorMethod |
Возвращает динамический метод конструктора указанного класса с заданной сигнатурой. |
GuardedInvocation |
getGuardedInvocation |
Создаёт защищённый вызов, подходящий для конкретного вызова с указанными аргументами в точке вызова. |
static Set |
getInstanceMethodNames |
Возвращает множество имён всех методов экземпляра класса. |
TypeBasedGuardingDynamicLinker |
getLinkerForClass |
Возвращает связыватель beans для отдельного класса. |
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— класс - Возвращает:
- связыватель beans для этого класса
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://docs.oracle.com/en/java/javase/25/docs/api/jdk.dynalink/jdk/dynalink/beans/BeansLinker.html