Класс ConstantCallSite
public non-sealed class ConstantCallSite extends CallSite
ConstantCallSite — это CallSite с неизменяемой целью, которую невозможно изменить. Инструкция invokedynamic, связанная с ConstantCallSite, навсегда привязана к цели точки вызова.- Начиная с:
- 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, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/lang/invoke/ConstantCallSite.html