Spec-Zone.ru › OpenJDK 27

Класс MethodHandleProxies

java.lang.Object
java.lang.invoke.MethodHandleProxies
public final class MethodHandleProxies extends Object
Этот класс состоит исключительно из статических методов, которые помогают адаптировать дескрипторы методов к другим типам JVM, например к интерфейсам.
Начиная с:
1.7

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

Модификатор и тип Метод Описание
static <T> T asInterfaceInstance(Class<T> intfc, MethodHandle target)
Создает экземпляр заданного однофункционального интерфейса, перенаправляющий вызовы к заданному дескриптору метода.
static boolean isWrapperInstance(Object x)
Определяет, был ли заданный объект создан вызовом asInterfaceInstance.
static MethodHandle wrapperInstanceTarget(Object x)
Создает или восстанавливает целевой дескриптор метода, поведение которого эквивалентно поведению единственного метода этого экземпляра обертки.
static Class<?> wrapperInstanceType(Object x)
Восстанавливает тип однофункционального интерфейса, для которого был создан этот экземпляр обертки.

Методы, объявленные в классе 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()
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова уведомления или прерывания, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова уведомления или прерывания, либо до истечения заданного промежутка реального времени.

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

asInterfaceInstance

public static <T> T asInterfaceInstance(Class<T> intfc, MethodHandle target)
Создает экземпляр заданного однофункционального интерфейса, перенаправляющий вызовы к заданному дескриптору метода.

Однофункциональный интерфейс — это интерфейс, объявляющий метод с уникальным именем. При определении метода с уникальным именем однофункционального интерфейса не учитываются общедоступные методы Object (toString, equals, hashCode), а также любые методы по умолчанию (неабстрактные). Например, Comparator является однофункциональным интерфейсом, хотя он повторно объявляет метод Object.equals и также объявляет методы по умолчанию, такие как Comparator.reverse.

Интерфейс должен быть общедоступным, не скрытым и не запечатанным. Дополнительные проверки доступа не выполняются.

Созданный экземпляр требуемого типа будет реагировать на вызов метода с уникальным именем этого типа, вызывая заданную цель с полученными аргументами и возвращая или выбрасывая то, что возвращает или выбрасывает цель. Вызов будет выполнен так, как если бы использовался target.invoke. Тип цели будет проверен до создания экземпляра, как при вызове asType, что может привести к WrongMethodTypeException.

Метод с уникальным именем может быть объявлен несколько раз с различными дескрипторами типов. (Например, он может быть перегружен или иметь мостовые методы.) Все такие объявления непосредственно связываются с целевым дескриптором метода. Типы аргументов и возвращаемых значений корректируются с помощью asType для каждого отдельного объявления.

Экземпляр обертки будет реализовывать запрошенный интерфейс и его суперинтерфейсы, но не другие однофункциональные интерфейсы. Это означает, что экземпляр не пройдет неожиданно проверку instanceof для типа, который не запрашивался.

Примечание по реализации: Следовательно, каждый экземпляр должен реализовывать уникальный однофункциональный интерфейс. Реализации не могут объединять несколько однофункциональных интерфейсов в одном классе реализации по образцу AWTEventMulticaster.

Дескриптор метода может выбросить необъявленное исключение, то есть любое проверяемое исключение (или другое проверяемое выбрасываемое значение), не объявленное единственным абстрактным методом запрошенного типа. В этом случае выбрасываемое значение будет обернуто в экземпляр UndeclaredThrowableException и выброшено в этой обернутой форме.

Как и Integer.valueOf, asInterfaceInstance является фабричным методом, результаты которого определяются их поведением. Не гарантируется, что при каждом вызове будет возвращен новый экземпляр.

Из-за возможности наличия мостовых методов и других особых случаев интерфейс может также иметь несколько абстрактных методов с одинаковым именем, но различными дескрипторами (типами возвращаемых значений и параметров). В этом случае все методы связываются с одной заданной целью. Проверка типов и эффективное преобразование asType применяются к каждому дескриптору типа метода, а все абстрактные методы совместно связываются с целью. Помимо этой проверки типов, дополнительные проверки для определения наличия какой-либо связи между абстрактными методами не выполняются.

В будущих версиях этого API могут быть добавлены дополнительные типы, например абстрактные классы с одним абстрактным методом. В будущих версиях этого API экземпляры оберток также могут быть дополнены одним или несколькими дополнительными общедоступными интерфейсами-маркерами.

Параметры типа:
T — требуемый тип обертки, однофункциональный интерфейс
Параметры:
intfc — объект класса, представляющий T
target — дескриптор метода, вызываемый из обертки
Возвращает:
обертку заданной цели с соответствующим типом
Выбрасывает:
NullPointerException — если один из аргументов равен null
IllegalArgumentException — если intfc не является допустимым аргументом этого метода
WrongMethodTypeException — если цель не может быть преобразована к типу, требуемому запрошенным интерфейсом

isWrapperInstance

public static boolean isWrapperInstance(Object x)
Определяет, был ли заданный объект создан вызовом asInterfaceInstance.
Параметры:
x — любая ссылка
Возвращает:
true, если ссылка не равна null и указывает на объект, созданный с помощью asInterfaceInstance

wrapperInstanceTarget

public static MethodHandle wrapperInstanceTarget(Object x)
Создает или восстанавливает целевой дескриптор метода, поведение которого эквивалентно поведению единственного метода этого экземпляра обертки. Объект x должен быть создан вызовом asInterfaceInstance. Это требование можно проверить с помощью isWrapperInstance.
Параметры:
x — любая ссылка
Возвращает:
дескриптор метода, реализующий единственный метод
Выбрасывает:
IllegalArgumentException — если ссылка x не указывает на экземпляр обертки

wrapperInstanceType

public static Class<?> wrapperInstanceType(Object x)
Восстанавливает тип однофункционального интерфейса, для которого был создан этот экземпляр обертки. Объект x должен быть создан вызовом asInterfaceInstance. Это требование можно проверить с помощью isWrapperInstance.
Параметры:
x — любая ссылка
Возвращает:
тип однофункционального интерфейса, для которого была создана обертка
Выбрасывает:
IllegalArgumentException — если ссылка x не указывает на экземпляр обертки

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по 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