Класс ConstantCallSite
public 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, 2021, 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/17/docs/api/java.base/java/lang/invoke/ConstantCallSite.html