Класс ConstantCallSite
- java.lang.Object
-
- java.lang.invoke.CallSite
-
- java.lang.invoke.ConstantCallSite
public class ConstantCallSite extends CallSite
Объект ConstantCallSite — это CallSite, целевой метод которого является постоянным и не может быть изменён. Инструкция invokedynamic , связанная с объектом ConstantCallSite, постоянно привязана к целевому методу места вызова.
Конструкторы
| Модификатор | Конструктор и описание |
|---|---|
ConstantCallSite(MethodHandle target) Создаёт место вызова с постоянным целевым методом. | |
protected |
ConstantCallSite(MethodType targetType,
MethodHandle createTargetHook) Создаёт место вызова с постоянным целевым методом, который, возможно, связан с самим местом вызова. |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
MethodHandle |
dynamicInvoker() Возвращает постоянный целевой метод этого места вызова. |
MethodHandle |
getTarget() Возвращает целевой метод места вызова, который ведёт себя как поле |
void |
setTarget(MethodHandle ignore) Всегда выбрасывает исключение |
Методы, унаследованные от класса java.lang.invoke.CallSite
type Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Конструкторы
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не завершён - См. также:
-
ConstantCallSite,VolatileCallSite,CallSite.setTarget(java.lang.invoke.MethodHandle),getTarget(),MutableCallSite.getTarget(),VolatileCallSite.getTarget()
setTarget
public final void setTarget(MethodHandle ignore)
Всегда выбрасывает исключение UnsupportedOperationException. Этот тип места вызова не может изменить свой целевой метод.
- Определено в:
-
setTargetв классеCallSite - Параметры:
-
ignore- новый целевой метод, который игнорируется - Исключения:
-
UnsupportedOperationException- поскольку этот тип места вызова не может изменить свой целевой метод - См. также:
-
CallSite.getTarget(),setTarget(java.lang.invoke.MethodHandle),MutableCallSite.setTarget(java.lang.invoke.MethodHandle),VolatileCallSite.setTarget(java.lang.invoke.MethodHandle)
dynamicInvoker
public final MethodHandle dynamicInvoker()
Возвращает постоянный целевой метод этого места вызова. Поскольку этот целевой метод никогда не меняется, это правильная реализация метода CallSite.dynamicInvoker.
- Определено в:
-
dynamicInvokerв классеCallSite - Возвращает:
- неизменяемое состояние связи этого места вызова, постоянный метод-обработчик
- Исключения:
-
IllegalStateException- если конструкторConstantCallSiteне завершён
© 1993, 2020, 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.