Module  java.base
软件包  java.lang.invoke

Class ConstantCallSite



  • public class ConstantCallSite
    extends CallSite
    A ConstantCallSite是一个CallSite其目标是永久性的,永远不能更改。 链接到ConstantCallSiteinvokedynamic指令永久绑定到呼叫站点的目标。
    从以下版本开始:
    1.7
    • 构造方法详细信息

      • ConstantCallSite

        public ConstantCallSite​(MethodHandle target)
        创建一个具有永久目标的呼叫站点。
        参数
        target - 与此呼叫站点永久关联的目标
        异常
        NullPointerException - 如果提出的目标为null
      • ConstantCallSite

        protected ConstantCallSite​(MethodType targetType,
                                   MethodHandle createTargetHook)
                            throws Throwable
        创建具有永久目标的呼叫站点,可能绑定到呼叫站点本身。

        在建设通话地点期间,调用createTargetHook以产生实际目标,好像通过(MethodHandle) createTargetHook.invoke(this)表格的(MethodHandle) createTargetHook.invoke(this)

        请注意,用户代码不能直接在子类构造函数中执行此类操作,因为目标必须在构建器返回ConstantCallSite之前ConstantCallSite

        挂钩被称为将呼叫站点绑定到目标方法句柄,典型的动作是someTarget.bindTo(this) 然而,钩子可以随意采取任何行动,包括忽略呼叫站点并返回一个恒定的目标。

        钩子返回的结果必须是与调用站点完全相同类型的方法句柄。

        当钩子被调用时,新的ConstantCallSite对象处于部分构造状态。 在这种状态下,调用getTarget或任何其他使用目标的尝试将导致一个IllegalStateException 在任何时候使用type方法获取通话网站的类型是type

        参数
        targetType - 与此呼叫站点永久关联的方法句柄的类型
        createTargetHook - 调用(在呼叫站点上)产生呼叫站点目标的方法句柄
        异常
        WrongMethodTypeException - 如果不能在所需的参数上调用钩子,或者如果钩子返回的目标不是给定的 targetType
        NullPointerException - 如果钩子返回一个空值
        ClassCastException - 如果钩子返回 MethodHandle以外的 MethodHandle
        Throwable - 钩子函数抛出的其他东西