Класс ConstantCallSite
public non-sealed class ConstantCallSite extends CallSite
ConstantCallSite представляет собой CallSite, цель которого является постоянной и никогда не может быть изменена. Инструкции invokedynamic, связанные с ConstantCallSite, постоянно привязаны к цели вызова.- Since:
- 1.7
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
| Создаёт вызов с постоянной целью. |
||
protected |
Создаёт вызов с постоянной целью, возможно, привязанной к самому вызову. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
final MethodHandle |
dynamicInvoker() |
Возвращает постоянную цель вызова. |
final MethodHandle |
getTarget() |
Возвращает целевой метод вызова, который ведет себя как поле final объекта ConstantCallSite. |
final void |
setTarget |
Всегда выбрасывает UnsupportedOperationException. |
Подробное описание конструкторов
ConstantCallSite
public ConstantCallSite(MethodHandle target)
- Параметры:
-
target- цель, которая будет постоянно ассоциироваться с этим вызовом - Исключения:
-
NullPointerException- если предлагаемая цель равна null
ConstantCallSite
protected ConstantCallSite(MethodType targetType, MethodHandle createTargetHook) throws Throwable
Во время создания вызова, createTargetHook вызывается для получения фактической цели, как если бы это был вызов вида (MethodHandle) createTargetHook.invoke(this).
Обратите внимание, что пользовательский код не может выполнить такое действие напрямую в подклассе конструктора, так как цель должна быть определена до возврата конструктора ConstantCallSite .
Этот метод связывает объект вызова с целевым обработчиком метода, и типичное действие будет someTarget.bindTo(this). Однако метод свободен выполнить любое действие, включая игнорирование вызова и возвращение постоянной цели.
Результат, возвращаемый методом, должен быть обработчиком метода ровно того же типа, что и вызов.
Пока вызывается метод, новый объект ConstantCallSite находится в частично сформированном состоянии. В этом состоянии вызов getTarget, или любая другая попытка использования цели, приведет к IllegalStateException. В любое время допустимо получить тип вызова с помощью метода type.
- Параметры:
-
targetType- тип обработчика метода, который будет постоянно ассоциироваться с этим вызовом -
createTargetHook- обработчик метода для вызова (в вызове) для получения цели вызова - Исключения:
-
WrongMethodTypeException- если обработчик не может быть вызван с требуемыми аргументами или если возвращённая обработчиком цель не является указанного типаtargetType -
NullPointerException- если обработчик возвращает null -
ClassCastException- если обработчик возвращает что-либо отличное от обработчикаMethodHandle -
Throwable- любые другие исключения, сгенерированные обработчиком
Подробное описание методов
getTarget
public final MethodHandle getTarget()
final объекта ConstantCallSite. То есть, цель всегда является оригинальным значением, переданным в вызов конструктора, который создал этот экземпляр.- Унаследованно от:
-
getTargetв классеCallSite - Возвращает:
- неизменяемое состояние связи этого вызова, постоянный обработчик метода
- Исключения:
-
IllegalStateException- если конструкторConstantCallSiteне завершён - См. также:
setTarget
public final void setTarget(MethodHandle ignore)
UnsupportedOperationException. Данный вид вызова не может изменить свою цель.- Унаследованно от:
-
setTargetв классеCallSite - Параметры:
-
ignore- новая цель, предлагаемая для вызова, которая игнорируется - Исключения:
-
UnsupportedOperationException- потому что этот вид вызова не может изменить свою цель - См. также:
dynamicInvoker
public final MethodHandle dynamicInvoker()
CallSite.dynamicInvoker.- Унаследованно от:
-
dynamicInvokerв классеCallSite - Возвращает:
- неизменяемое состояние связи этого вызова, постоянный обработчик метода
- Исключения:
-
IllegalStateException- если конструкторConstantCallSiteне завершён
© 1993, 2023, 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/21/docs/api/java.base/java/lang/invoke/ConstantCallSite.html