- java.lang.Object
-
- java.lang.invoke.CallSite
-
- java.lang.invoke.ConstantCallSite
-
-
构造方法摘要
构造方法 变量 构造器 描述 ConstantCallSite(MethodHandle target)
创建具有永久目标的呼叫站点。protected
ConstantCallSite(MethodType targetType, MethodHandle createTargetHook)
使用永久目标创建一个呼叫站点,可能绑定到呼叫站点本身。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 MethodHandle
dynamicInvoker()
返回此调用站点的永久目标。MethodHandle
getTarget()
返回调用点,其行为类似于目标方法final
的领域ConstantCallSite
。void
setTarget(MethodHandle ignore)
-
-
-
构造方法详细信息
-
ConstantCallSite
public ConstantCallSite(MethodHandle target)
创建具有永久目标的呼叫站点。- 参数
-
target
- 与此呼叫站点永久关联的目标 - 异常
-
NullPointerException
- 如果建议的目标为空
-
ConstantCallSite
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
以外的其他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
-
-