Modifier | Constructor and Description |
---|---|
|
ConstantCallSite(MethodHandle target)
创建一个具有永久目标的呼叫站点。
|
protected |
ConstantCallSite(MethodType targetType, MethodHandle createTargetHook)
创建具有永久目标的呼叫站点,可能绑定到呼叫站点本身。
|
Modifier and Type | Method and Description |
---|---|
MethodHandle |
dynamicInvoker()
返回此呼叫站点的永久目标。
|
MethodHandle |
getTarget()
返回调用点,其行为类似于目标的方法
final 基于场
ConstantCallSite 。
|
void |
setTarget(MethodHandle ignore)
|
public ConstantCallSite(MethodHandle target)
target
- 与此呼叫站点永久关联的目标
NullPointerException
- 如果提出的目标为null
protected ConstantCallSite(MethodType targetType, MethodHandle createTargetHook) throws Throwable
在建设通话网站期间, createTargetHook
被调用以产生实际目标,好像通过(MethodHandle) createTargetHook.invoke(this)
的呼叫。
请注意,用户代码不能直接在子类构造函数中执行此类操作,因为在ConstantCallSite
构造函数返回之前,目标必须被修复。
挂钩被称为将呼叫站点绑定到目标方法句柄,典型的动作是someTarget.bindTo(this)
。 然而,钩子可以随意采取任何行动,包括忽略呼叫站点并返回一个恒定的目标。
钩子返回的结果必须是与调用站点完全相同类型的方法句柄。
当挂钩被调用时,新的ConstantCallSite
对象处于部分构造状态。 在这种状态下,调用getTarget
或任何其他使用目标的尝试将导致IllegalStateException
。 使用type
方法获取呼叫站点的类型type
合法的。
targetType
- 与此呼叫站点永久关联的方法句柄的类型
createTargetHook
- 调用(在呼叫站点上)产生呼叫站点目标的方法句柄
WrongMethodTypeException
- 如果钩子不能在所需的参数上被调用,或者如果钩子返回的目标不是给定的
targetType
NullPointerException
- 如果钩子返回一个空值
ClassCastException
- 如果挂钩返回的东西不是
MethodHandle
Throwable
- 钩子函数抛出的其他东西
public final MethodHandle getTarget()
final
基于场ConstantCallSite
。
也就是说,目标始终是传递给创建此实例的构造函数调用的原始值。
getTarget
在类别
CallSite
IllegalStateException
- 如果
ConstantCallSite
构造函数尚未完成
ConstantCallSite
, VolatileCallSite
, CallSite.setTarget(java.lang.invoke.MethodHandle)
, getTarget()
, MutableCallSite.getTarget()
, VolatileCallSite.getTarget()
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)
public final MethodHandle dynamicInvoker()
CallSite.dynamicInvoker
的正确实现 。
dynamicInvoker
在类别
CallSite
IllegalStateException
- 如果
ConstantCallSite
构造函数尚未完成