ConstantCallSite
is a CallSite
whose target is permanent, and can never be changed.
An invokedynamic
instruction linked to a ConstantCallSite
is permanently
bound to the call site's target.- Since:
- 1.7
-
Constructor Summary
ModifierConstructorDescriptionConstantCallSite(MethodHandle target)
Creates a call site with a permanent target.protected
ConstantCallSite(MethodType targetType, MethodHandle createTargetHook)
Creates a call site with a permanent target, possibly bound to the call site itself. -
Method Summary
Modifier and TypeMethodDescriptionReturns this call site's permanent target.Returns the target method of the call site, which behaves like afinal
field of theConstantCallSite
.void
setTarget(MethodHandle ignore)
Always throws anUnsupportedOperationException
.
-
Constructor Details
-
ConstantCallSite
Creates a call site with a permanent target.- Parameters:
target
- the target to be permanently associated with this call site- Throws:
NullPointerException
- if the proposed target is null
-
ConstantCallSite
Creates a call site with a permanent target, possibly bound to the call site itself.During construction of the call site, the
createTargetHook
is invoked to produce the actual target, as if by a call of the form(MethodHandle) createTargetHook.invoke(this)
.Note that user code cannot perform such an action directly in a subclass constructor, since the target must be fixed before the
ConstantCallSite
constructor returns.The hook is said to bind the call site to a target method handle, and a typical action would be
someTarget.bindTo(this)
. However, the hook is free to take any action whatever, including ignoring the call site and returning a constant target.The result returned by the hook must be a method handle of exactly the same type as the call site.
While the hook is being called, the new
ConstantCallSite
object is in a partially constructed state. In this state, a call togetTarget
, or any other attempt to use the target, will result in anIllegalStateException
. It is legal at all times to obtain the call site's type using thetype
method.- Parameters:
targetType
- the type of the method handle to be permanently associated with this call sitecreateTargetHook
- a method handle to invoke (on the call site) to produce the call site's target- Throws:
WrongMethodTypeException
- if the hook cannot be invoked on the required arguments, or if the target returned by the hook is not of the giventargetType
NullPointerException
- if the hook returns a null valueClassCastException
- if the hook returns something other than aMethodHandle
Throwable
- anything else thrown by the hook function
-
-
Method Details
-
getTarget
Returns the target method of the call site, which behaves like afinal
field of theConstantCallSite
. That is, the target is always the original value passed to the constructor call which created this instance.- Specified by:
getTarget
in classCallSite
- Returns:
- the immutable linkage state of this call site, a constant method handle
- Throws:
IllegalStateException
- if theConstantCallSite
constructor has not completed- See Also:
ConstantCallSite
,VolatileCallSite
,CallSite.setTarget(java.lang.invoke.MethodHandle)
,getTarget()
,MutableCallSite.getTarget()
,VolatileCallSite.getTarget()
-
setTarget
Always throws anUnsupportedOperationException
. This kind of call site cannot change its target.- Specified by:
setTarget
in classCallSite
- Parameters:
ignore
- a new target proposed for the call site, which is ignored- Throws:
UnsupportedOperationException
- because this kind of call site cannot change its target- See Also:
CallSite.getTarget()
,setTarget(java.lang.invoke.MethodHandle)
,MutableCallSite.setTarget(java.lang.invoke.MethodHandle)
,VolatileCallSite.setTarget(java.lang.invoke.MethodHandle)
-
dynamicInvoker
Returns this call site's permanent target. Since that target will never change, this is a correct implementation ofCallSite.dynamicInvoker
.- Specified by:
dynamicInvoker
in classCallSite
- Returns:
- the immutable linkage state of this call site, a constant method handle
- Throws:
IllegalStateException
- if theConstantCallSite
constructor has not completed
-