Spec-Zone.ru › OpenJDK 8

Класс 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()

Возвращает целевой метод места вызова, который ведёт себя как поле 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)

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

Параметры:
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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API