Класс 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, а не ослабленные объекты поиска или открытый объект поиска.
Поведение при обработке отсутствующих членов можно настроить, передав 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). |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
boolean |
equals |
Определяет, равен ли этот объект другому объекту. |
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 |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо истечения заданного промежутка реального времени. |
Подробное описание конструкторов
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.