Класс 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-конструктором (полученным через getConstructorMethod(Class, String)).

static boolean isDynamicMethod​(Object obj)

Возвращает true, если объект является Java-динамическим методом (например, полученным через операцию GET:METHOD над Java-объектом или StaticClass или через getConstructorMethod(Class, String).

Методы, объявленные в классе 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

Spec-Zone .ru
спецификации, руководства, описания, API