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) 永続的なターゲットを持つコール・サイトを作成します。protected
ConstantCallSite
(MethodType targetType, MethodHandle createTargetHook) 永続的なターゲットを持つコール・サイトを作成します(コール・サイト自体にバインドされる場合があります)。 -
メソッドのサマリー
修飾子と型メソッド説明final MethodHandle
このコール・サイトの永続的なターゲットを返します。final MethodHandle
コール・サイトのターゲット・メソッドを返しますが、これは、ConstantCallSite
のfinal
フィールドのように振る舞います。final void
setTarget
(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
コンストラクタが完了していない場合- 関連項目:
-
setTarget
public final void setTarget(MethodHandle ignore) 常にUnsupportedOperationException
をスローします。 この種類のコール・サイトはターゲットを変更できません。- 定義:
setTarget
、クラス:CallSite
- パラメータ:
ignore
- このコール・サイトに提案される新しいターゲット(無視される)- 例外:
UnsupportedOperationException
- この種類のコール・サイトはターゲットを変更できないため- 関連項目:
-
dynamicInvoker
public final MethodHandle dynamicInvoker()このコール・サイトの永続的なターゲットを返します。 そのターゲットは決して変更されないため、これがCallSite.dynamicInvoker
の正しい実装となります。- 定義:
dynamicInvoker
、クラス:CallSite
- 戻り値:
- このコール・サイトの不変のリンケージ状態(定数メソッド・ハンドル)
- 例外:
IllegalStateException
-ConstantCallSite
コンストラクタが完了していない場合
-