Класс MethodHandleProxies
public final class MethodHandleProxies extends Object
- Начиная с:
- 1.7
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static <T> T |
asInterfaceInstance |
Создает экземпляр заданного однофункционального интерфейса, перенаправляющий вызовы к заданному дескриптору метода. |
static boolean |
isWrapperInstance |
Определяет, был ли заданный объект создан вызовом asInterfaceInstance. |
static MethodHandle |
wrapperInstanceTarget |
Создает или восстанавливает целевой дескриптор метода, поведение которого эквивалентно поведению единственного метода этого экземпляра обертки. |
static Class |
wrapperInstanceType |
Восстанавливает тип однофункционального интерфейса, для которого был создан этот экземпляр обертки. |
Методы, объявленные в классе 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() |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова уведомления или прерывания. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова уведомления или прерывания, либо до истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова уведомления или прерывания, либо до истечения заданного промежутка реального времени. |
Подробное описание методов
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 не указывает на экземпляр обертки
© 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.