Spec-Zone.ru › OpenJDK 25

Класс 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) для доступа к связывателям отдельных классов.

Начиная с версии:
9

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

Конструктор Описание
BeansLinker()
Создаёт новый связыватель beans.
BeansLinker(MissingMemberHandlerFactory missingMemberHandlerFactory)
Создаёт новый связыватель beans с указанной фабрикой для создания обработчиков отсутствующих элементов.

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

Модификатор и тип Метод Описание
static Object getConstructorMethod(Class<?> clazz, String signature)
Возвращает динамический метод конструктора указанного класса с заданной сигнатурой.
GuardedInvocation getGuardedInvocation(LinkRequest request, LinkerServices linkerServices)
Создаёт защищённый вызов, подходящий для конкретного вызова с указанными аргументами в точке вызова.
static Set<String> getInstanceMethodNames(Class<?> clazz)
Возвращает множество имён всех методов экземпляра класса.
TypeBasedGuardingDynamicLinker getLinkerForClass(Class<?> clazz)
Возвращает связыватель beans для отдельного класса.
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).

Методы, объявленные в классе Object

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

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

BeansLinker

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

BeansLinker

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

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

getLinkerForClass

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

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 — если операция завершается с ошибкой по какой-либо причине

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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

Spec-Zone.ru

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