Класс ConstantCallSite

public class ConstantCallSite
extends CallSite

A ConstantCallSite является CallSite, целевой объект которого постоянен и никогда не может быть изменён. Инструкции invokedynamic , связанные с ConstantCallSite , постоянно привязаны к целевому объекту вызова.

Since:
1.7

Конструкторы

Модификатор Конструктор Описание
ConstantCallSite​(MethodHandle target)

Создаёт вызов с постоянной целью.

protected ConstantCallSite​(MethodType targetType, MethodHandle createTargetHook)

Создаёт вызов с постоянной целью, возможно привязанной к самому вызову.

Методы

Модификатор и тип Метод Описание
MethodHandle dynamicInvoker()

Возвращает постоянную цель вызова.

MethodHandle getTarget()

Возвращает целевой метод вызова, который ведет себя как поле final в классе ConstantCallSite.

void setTarget​(MethodHandle ignore)

Всегда выбрасывает исключение UnsupportedOperationException.

Методы, объявленные в классе java.lang.invoke.CallSite

type

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Конструкторы

ConstantCallSite

public ConstantCallSite(MethodHandle target)

Создаёт вызов с постоянной целью.

Parameters:
target - целевой объект, который будет постоянно связан с этим вызовом
Throws:
NullPointerException - если предлагаемый целевой объект равен null

ConstantCallSite

protected ConstantCallSite(MethodType targetType,
                           MethodHandle createTargetHook)
                    throws Throwable

Создаёт вызов с постоянной целью, возможно привязанной к самому вызову.

Во время создания вызова, createTargetHook вызывается для получения фактической цели, как если бы вызов был в формате (MethodHandle) createTargetHook.invoke(this).

Обратите внимание, что пользовательский код не может выполнить такое действие напрямую в подклассе конструктора, поскольку цель должна быть определена до возвращения конструктора ConstantCallSite.

Этот метод связывает вызов с целевым объектом метода, а типичное действие – someTarget.bindTo(this). Однако, метод может выполнить любое действие, включая игнорирование вызова и возвращение постоянной цели.

Результат, возвращаемый методом, должен быть объектом типа метод, точно соответствующим типу вызова.

Пока вызывается метод, новый объект ConstantCallSite находится в частично построенном состоянии. В этом состоянии обращение к getTarget, или любая другая попытка использовать целевой объект, приведет к IllegalStateException. В любое время разрешено получить тип вызова, используя метод type.

Parameters:
targetType - тип объекта метода, который будет постоянно связан с этим вызовом
createTargetHook - объект метода, вызов которого (на вызове) генерирует целевой объект вызова
Throws:
WrongMethodTypeException - если метод не может быть вызван с требуемыми аргументами, или если целевой объект, возвращенный методом, не имеет указанного типа targetType
NullPointerException - если метод возвращает null
ClassCastException - если метод возвращает что-то кроме MethodHandle
Throwable - любое другое исключение, сгенерированное методом

Методы

getTarget

public final MethodHandle getTarget()

Возвращает целевой метод вызова, который ведет себя как поле final в классе ConstantCallSite. То есть, целевой объект всегда является исходным значением, переданным в вызов конструктора, который создал данный экземпляр.

Specified by:
getTarget в классе CallSite
Returns:
неизменяемое состояние связи этого вызова, постоянный объект метода
Throws:
IllegalStateException - если конструктор ConstantCallSite не завершён
See Also:
ConstantCallSite, VolatileCallSite, CallSite.setTarget(java.lang.invoke.MethodHandle), getTarget(), MutableCallSite.getTarget(), VolatileCallSite.getTarget()

setTarget

public final void setTarget(MethodHandle ignore)

Всегда выбрасывает UnsupportedOperationException. Такой вид вызова не может изменить свою цель.

Specified by:
setTarget в классе CallSite
Parameters:
ignore - новый целевой объект, который игнорируется
Throws:
UnsupportedOperationException - так как такой вид вызова не может изменить свою цель
See Also:
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.

Specified by:
dynamicInvoker в классе CallSite
Returns:
неизменяемое состояние связи этого вызова, постоянный объект метода
Throws:
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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/invoke/ConstantCallSite.html

Spec-Zone .ru
спецификации, руководства, описания, API