Spec-Zone.ru › OpenJDK 27

Класс 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).

Начиная с:
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
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Определяет, равен ли этот объект другому объекту.
protected void finalize()
Устарело, подлежит удалению: этот элемент API может быть удалён в будущей версии.
Финализация объявлена устаревшей и подлежит удалению в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо истечения заданного промежутка реального времени.

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

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, 2026, 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.

Spec-Zone.ru

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