Spec-Zone .ru
спецификации, руководства, описания, API
|
public class MethodHandleProxies extends Object
Модификатор и Тип | Метод и Описание |
---|---|
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)
Восстанавливает уникальный тип интерфейса единственного метода, для которого создавался этот экземпляр обертки.
|
public static <T> T asInterfaceInstance(Class<T> intfc, MethodHandle target)
Интерфейс единственного метода является интерфейсом, который объявляет уникально именованный метод. Определяя уникально именованный метод интерфейса единственного метода, общественности Object
методы (toString
, equals
, hashCode
) игнорируются. Например, Comparator
интерфейс единственного метода, даже при том, что он повторно объявляет Object.equals
метод.
Интерфейс должен быть общедоступным. Никакие дополнительные проверки прав доступа не выполняются.
Результирующий экземпляр необходимого типа ответит на вызов уникально именованного метода типа, вызывая данную цель на входящих параметрах, и возвращаясь или бросая безотносительно целевых возвратов или бросков. Вызов будет то, как будто target.invoke
. Тип цели будет проверен прежде, чем экземпляр создается, как будто звонком asType
, который может привести к a WrongMethodTypeException
.
Уникально именованному методу позволяют быть, умножаются объявленный, с отличными дескрипторами типа. (Например, это может быть перегружено, или может обладать мостовыми методами.) Все такие объявления соединяются непосредственно с целевым дескриптором метода. Параметр и типы возврата корректируются asType
для каждого отдельного объявления.
Экземпляр обертки реализует требуемый интерфейс и его супертипы, но никакие другие интерфейсы единственного метода. Это означает, что экземпляр не будет неожиданно передавать instanceof
тест для любого нетребуемого типа.
Примечание реализации: Поэтому, каждый экземпляр должен реализовать уникальный интерфейс единственного метода. Реализации, возможно, не связывают вместе многократные интерфейсы единственного метода на единственные классы реализации в стиле AWTEventMulticaster
.
Дескриптор метода может выдать необъявленное исключение, что означает любое проверенное исключение (или другой проверенный throwable) не объявленный единственным абстрактным методом требуемого типа. Если это произойдет, то throwable будет обернут в экземпляр UndeclaredThrowableException
и добавленный та обернутая форма.
Как Integer.valueOf
, asInterfaceInstance
метод фабрики, результаты которого определяются их поведением. Это, как гарантируют, не возвратит новый экземпляр для каждого вызова.
Из-за возможности мостовых методов и других угловых случаев, у интерфейса может также быть несколько абстрактных методов с тем же самым именем, но наличием отличных дескрипторов (типы возвратов и параметров). В этом случае все методы связываются вместе с одной данной целью. Проверка типа и эффективный asType
преобразование применяется к каждому дескриптору типа метода, и все абстрактные методы связываются с целью вместе. Вне этой проверки типа никакие дальнейшие проверки не осуществляются, чтобы решить, что абстрактные методы связываются всегда.
Будущие версии этого API могут принять дополнительные типы, такие как абстрактные классы с единственными абстрактными методами. Будущие версии этого API могут также оборудовать экземпляры обертки одним или более дополнительными общедоступными интерфейсами "маркера".
target
- дескриптор метода, чтобы вызвать от оберткиintfc
- требуемый тип обертки, интерфейса единственного методаNullPointerException
- если любым параметром является нульIllegalArgumentException
- если intfc
не допустимый параметр этому методуWrongMethodTypeException
- если цель не может быть преобразована в тип, требуемый требуемым интерфейсомpublic static boolean isWrapperInstance(Object x)
asInterfaceInstance
.x
- любая ссылкаasInterfaceInstance
public static MethodHandle wrapperInstanceTarget(Object x)
x
должно быть, был произведен звонком asInterfaceInstance
. Это требование может быть протестировано через isWrapperInstance
.x
- любая ссылкаIllegalArgumentException
- если ссылка x не к экземпляру оберткиpublic static Class<?> wrapperInstanceType(Object x)
x
должно быть, был произведен звонком asInterfaceInstance
. Это требование может быть протестировано через isWrapperInstance
.x
- любая ссылкаIllegalArgumentException
- если ссылка x не к экземпляру обертки
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92