Класс BeansLinker
- java.lang.Object
-
- jdk.dynalink.beans.BeansLinker
- Все реализованные интерфейсы:
GuardingDynamicLinker
public class BeansLinker extends Object implements GuardingDynamicLinker
Связующее звено для обычных Java-объектов. Обычно используется как конечное резервное связующее звено DynamicLinkerFactory, так что у него есть возможность связать вызовы к всем объектам, которые не распознаны другими связующими звеньями. В частности, это связующее звено будет:
- выставлять все публичные методы формы
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).
Конструкторы
| Конструктор | Описание |
|---|---|
BeansLinker() | Создает новое связующее звено бинов. |
BeansLinker(MissingMemberHandlerFactory missingMemberHandlerFactory) | Создает новое связующее звено бинов со указанным фабричным методом для создания обработчиков отсутствующих членов. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
static Object | getConstructorMethod(Class<?> clazz,
String signature) | Возвращает динамический метод конструктора заданного класса и заданной сигнатуры. |
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-конструктором (полученным через |
static boolean | isDynamicMethod(Object obj) | Возвращает true, если объект является Java-динамическим методом (например, полученным через операцию |
Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Методы, объявленные в интерфейсе jdk.dynalink.linker.GuardingDynamicLinker
getGuardedInvocation Конструкторы
BeansLinker
public BeansLinker()
Создаёт новый связующий объект для обработки bean. Эквивалентно BeansLinker(MissingMemberHandlerFactory) с null в качестве фабрики обработчика отсутствующих членов, что приводит к стандартному поведению для связывания и обработки отсутствующих членов.
BeansLinker
public BeansLinker(MissingMemberHandlerFactory missingMemberHandlerFactory)
Создаёт новый связующий объект для обработки bean с указанной фабрикой для создания обработчиков отсутствующих членов. Переданная фабрика может быть null, если достаточным является стандартное поведение. Подробности см. в MissingMemberHandlerFactory.
- Параметры:
-
missingMemberHandlerFactory- фабрика для создания обработчиков операций с отсутствующими членами.
Методы
getLinkerForClass
public TypeBasedGuardingDynamicLinker getLinkerForClass(Class<?> clazz)
Возвращает связующий объект bean для определённого класса. Полезно, когда необходимо переопределить или расширить поведение связывания для некоторых классов в связующем объекте среды выполнения языка, но при этом сохранить делегирование на стандартное поведение в некоторых случаях.
- Параметры:
-
clazz- класс - Возвращает:
- объект связывания bean для этого класса
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- класс - Возвращает:
- набор имён всех статических методов класса.
© 1993, 2020, 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/11/docs/api/jdk.dynalink/jdk/dynalink/beans/BeansLinker.html