java.lang.Object
java.lang.invoke.CallSite
java.lang.invoke.ConstantCallSite
- 自版本:
- 1.7
-
Constructor Summary
ModifierConstructorDescriptionConstantCallSite
(MethodHandle target) 创建一个具有永久目标的调用点。protected
ConstantCallSite
(MethodType targetType, MethodHandle createTargetHook) 创建一个具有永久目标的调用点,可能绑定到调用点本身。 -
Method Summary
Modifier and TypeMethodDescriptionfinal MethodHandle
返回此调用点的永久目标。final MethodHandle
返回调用点的目标方法,其行为类似于ConstantCallSite
的final
字段。final void
setTarget
(MethodHandle ignore)
-
Constructor Details
-
ConstantCallSite
创建一个具有永久目标的调用点。- 参数:
-
target
- 与此调用点永久关联的目标 - 抛出:
-
NullPointerException
- 如果提议的目标为null
-
ConstantCallSite
创建一个具有永久目标的调用点,可能绑定到调用点本身。在构造调用点时,将调用
createTargetHook
以生成实际目标,就好像通过调用(MethodHandle) createTargetHook.invoke(this)
的形式。请注意,用户代码不能直接在子类构造函数中执行此操作,因为目标必须在
ConstantCallSite
构造函数返回之前固定。该钩子被称为将调用点绑定到目标方法句柄,典型操作可能是
someTarget.bindTo(this)
。但是,该钩子可以自由地执行任何操作,包括忽略调用点并返回一个常量目标。钩子返回的结果必须是与调用点完全相同类型的方法句柄。
在调用钩子时,新的
ConstantCallSite
对象处于部分构造状态。在此状态下,调用getTarget
或任何其他尝试使用目标的操作将导致IllegalStateException
。可以随时使用type
方法获取调用点的类型。- 参数:
-
targetType
- 与此调用点永久关联的方法句柄的类型 -
createTargetHook
- 要调用的方法句柄(在调用点上)以生成调用点的目标 - 抛出:
-
WrongMethodTypeException
- 如果无法在所需参数上调用钩子,或者如果钩子返回的目标不是给定的targetType
-
NullPointerException
- 如果钩子返回null值 -
ClassCastException
- 如果钩子返回的不是MethodHandle
-
Throwable
- 钩子函数抛出的其他任何异常
-
-
Method Details
-
getTarget
返回调用点的目标方法,其行为类似于ConstantCallSite
的final
字段。也就是说,目标始终是传递给创建此实例的构造函数调用的原始值。- 指定者:
-
getTarget
在类CallSite
中 - 返回:
- 此调用点的不可变链接状态,一个常量方法句柄
- 抛出:
-
IllegalStateException
- 如果ConstantCallSite
构造函数尚未完成 - 参见:
-
setTarget
总是抛出一个UnsupportedOperationException
。这种类型的调用点无法更改其目标。- 指定者:
-
setTarget
在类CallSite
中 - 参数:
-
ignore
- 为调用点提议的新目标,将被忽略 - 抛出:
-
UnsupportedOperationException
- 因为这种类型的调用点无法更改其目标 - 参见:
-
dynamicInvoker
返回此调用点的永久目标。由于该目标永远不会更改,这是CallSite.dynamicInvoker
的正确实现。- 指定者:
-
dynamicInvoker
在类CallSite
中 - 返回:
- 此调用点的不可变链接状态,一个常量方法句柄
- 抛出:
-
IllegalStateException
- 如果ConstantCallSite
构造函数尚未完成
-