- java.lang.Object
-
- java.lang.invoke.CallSite
-
- java.lang.invoke.ConstantCallSite
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 ConstantCallSite(MethodHandle target)
创建一个具有永久目标的呼叫站点。protected
ConstantCallSite(MethodType targetType, MethodHandle createTargetHook)
创建具有永久目标的呼叫站点,可能绑定到呼叫站点本身。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 MethodHandle
dynamicInvoker()
返回此呼叫站点的永久目标。MethodHandle
getTarget()
返回调用点,其行为类似于目标方法final
的领域ConstantCallSite
。void
setTarget(MethodHandle ignore)
-
-
-
构造方法详细信息
-
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
- 钩子函数抛出的其他东西
-
-
方法详细信息
-
getTarget
public final MethodHandle getTarget()
返回调用点,其行为类似于目标方法final
的领域ConstantCallSite
。 也就是说,目标始终是传递给创建此实例的构造函数调用的原始值。- Specified by:
-
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
。 这种呼叫站点不能改变其目标。- Specified by:
-
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
的实现。- Specified by:
-
dynamicInvoker
在CallSite
- 结果
- 这个调用站点的不变的链接状态,一个恒定的方法句柄
- 异常
-
IllegalStateException
- if theConstantCallSite
constructor has not completed
-
-