java.lang.Object
java.lang.invoke.CallSite
java.lang.invoke.ConstantCallSite
- 自版本:
- 1.7
-
Constructor Summary
ConstructorsModifierConstructorDescriptionConstantCallSite(MethodHandle target) 创建一个具有永久目标的调用点。protectedConstantCallSite(MethodType targetType, MethodHandle createTargetHook) 创建一个具有永久目标的调用点,可能绑定到调用点本身。 -
Method Summary
Modifier and TypeMethodDescriptionfinal MethodHandle返回此调用点的永久目标。final MethodHandle返回调用点的目标方法,其行为类似于ConstantCallSite的final字段。final voidsetTarget(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构造函数尚未完成
-