java.lang.Object
java.lang.invoke.CallSite
java.lang.invoke.ConstantCallSite
public class ConstantCallSite extends CallSite
ConstantCallSiteは、永続的で決して変更できないターゲットを持つCallSiteです。 ConstantCallSiteにリンクされたinvokedynamic命令は、そのコール・サイトのターゲットに永続的にバインドされます。 - 導入されたバージョン:
- 1.7
-
コンストラクタのサマリー
コンストラクタ 修飾子 コンストラクタ 説明 ConstantCallSite(MethodHandle target)永続的なターゲットを持つコール・サイトを作成します。protectedConstantCallSite(MethodType targetType, MethodHandle createTargetHook)永続的なターゲットを持つコール・サイトを作成します(コール・サイト自体にバインドされる場合があります)。 -
メソッドのサマリー
修飾子と型 メソッド 説明 MethodHandledynamicInvoker()このコール・サイトの永続的なターゲットを返します。MethodHandlegetTarget()コール・サイトのターゲット・メソッドを返しますが、これは、ConstantCallSiteのfinalフィールドのように振る舞います。voidsetTarget(MethodHandle ignore)常にUnsupportedOperationExceptionをスローします。
-
コンストラクタの詳細
-
ConstantCallSite
public ConstantCallSite(MethodHandle target)永続的なターゲットを持つコール・サイトを作成します。- パラメータ:
target- このコール・サイトに永続的に関連付けるターゲット- 例外:
NullPointerException- 提案されたターゲットがnullの場合
-
ConstantCallSite
protected ConstantCallSite(MethodType targetType, MethodHandle createTargetHook) throws Throwable永続的なターゲットを持つコール・サイトを作成します(コール・サイト自体にバインドされる場合があります)。コール・サイトの構築中、
(MethodHandle) createTargetHook.invoke(this)の形式の呼出しを行った場合と同様に、createTargetHookが呼び出されて実際のターゲットが生成されます。ユーザー・コードはサブクラスのコンストラクタ内でそのようなアクションを直接実行することはできませんが、これは、
ConstantCallSiteコンストラクタから戻る前にターゲットが固定される必要があるからです。フックはこのコール・サイトをターゲット・メソッド・ハンドルにバインドするよう指示されるので、通常のアクションは
someTarget.bindTo(this)になります。 ただし、フックはどのようなアクションでも自由に行えます(コール・サイトを無視して定数ターゲットを返すなど)。フックから返される結果は、コール・サイトと厳密に同じ型のメソッド・ハンドルでなければいけません。
フックが呼び出されている間、新しい
ConstantCallSiteオブジェクトは部分的に構築された状態になっています。 この状態でgetTargetの呼び出しやターゲットを使用するその他の試みを行うと、IllegalStateExceptionが発行されます。typeメソッドを使ってコール・サイトの型を取得することは、どのような状況でも問題ありません。- パラメータ:
targetType- このコール・サイトに永続的に関連付けるメソッド・ハンドルの型createTargetHook- コール・サイトのターゲットを生成するために(コール・サイト上で)呼び出すメソッド・ハンドル- 例外:
WrongMethodTypeException- 要求された引数でフックを呼び出せない場合、またはフックから返されたターゲットの型が指定されたtargetTypeでない場合NullPointerException- フックからnull値が返された場合ClassCastException- フックからMethodHandle以外の値が返された場合Throwable- フック関数からスローされるその他なにか
-
-
メソッドの詳細
-
getTarget
public final MethodHandle getTarget()コール・サイトのターゲット・メソッドを返しますが、これは、ConstantCallSiteのfinalフィールドのように振る舞います。 つまり、ターゲットは常に、このインスタンスを作成したコンストラクタ呼出しに渡される元の値です。- 定義:
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をスローします。 この種類のコール・サイトはターゲットを変更できません。- 定義:
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の正しい実装となります。- 定義:
dynamicInvoker、クラス:CallSite- 戻り値:
- このコール・サイトの不変のリンケージ状態(定数メソッド・ハンドル)
- 例外:
IllegalStateException-ConstantCallSiteコンストラクタが完了していない場合
-