モジュール jdk.dynalink
パッケージ jdk.dynalink

クラスCallSiteDescriptor

java.lang.Object
jdk.dynalink.SecureLookupSupplier
jdk.dynalink.CallSiteDescriptor

public class CallSiteDescriptor extends SecureLookupSupplier
コール・サイト記述子には、コール・サイトのリンクに必要なすべての情報が含まれます。 この情報は通常、ブートストラップ・メソッドへのパラメータとして渡され、コール・サイトが発生するコール元クラスのMethodHandles.Lookupオブジェクト、コール・サイトでの動的操作およびコール・サイトのメソッド・タイプで構成されます。 CallSiteDescriptorオブジェクトはDynalinkで使用され、DynamicLinkerが後で使用するためにこれらのパラメータを取得して保存します。

組込みのRelinkableCallSite実装のコンストラクタはすべて、コール・サイト記述子を取ります。

コール・サイト記述子は不変である必要があります。 このクラスをそのまま使用することも、特に記述子にさらに情報を追加する必要がある場合(通常は、追加パラメータでブートストラップ・メソッドに渡される値)にサブクラス化することもできます。 記述子は不変である必要があるため、呼び出しサイトがそれらを共有するように、同等の記述子のキャッシュを設定できます。

クラスは、SecureLookupSupplierを拡張して、そのクラスが実行するMethodHandles.Lookupオブジェクトへのセキュリティ・チェックされたアクセスを行います。 このルックアップは、この記述子によって記述されたコール・サイトのターゲットとして設定するメソッド・ハンドルを検索するために使用する必要があります。

  • コンストラクタの詳細

    • CallSiteDescriptor

      public CallSiteDescriptor(MethodHandles.Lookup lookup, Operation operation, MethodType methodType)
      新しいコール・サイト記述子を作成します。
      パラメータ:
      lookup - コール・サイトが属するクラスを記述するルックアップ・オブジェクト。 java.lang.invokeブートストラップ・メソッドから記述子を作成する場合、その記述子はブートストラップに渡されるルックアップである必要があります。
      operation - コール・サイトでの動的操作。
      methodType - コール・サイトのメソッド・タイプ。 java.lang.invokeブートストラップ・メソッドから記述子を作成する場合、その記述子はブートストラップに渡されるメソッド・タイプである必要があります。
  • メソッドの詳細

    • getOperation

      public final Operation getOperation()
      コール・サイトで操作を返します。
      戻り値:
      コール・サイトでの操作。
    • getMethodType

      public final MethodType getMethodType()
      コール・サイトのメソッドのタイプ。
      戻り値:
      コール・サイトでのメソッドのタイプ。
    • changeMethodType

      public final CallSiteDescriptor changeMethodType(MethodType newMethodType)
      メソッド・タイプとこの記述子のみが異なるコール・サイト記述子を検索または作成します。 changeMethodTypeInternal(MethodType)を呼び出します。
      パラメータ:
      newMethodType - 新しいメソッド型
      戻り値:
      メソッド・タイプが変更されたコール・サイト記述子。
      例外:
      NullPointerException - newMethodTypeがNULLの場合。
    • changeMethodTypeInternal

      protected CallSiteDescriptor changeMethodTypeInternal(MethodType newMethodType)
      メソッド・タイプとこの記述子のみが異なるコール・サイト記述子を検索または作成します。 サブクラスは、その正確なクラスのオブジェクトを返すため、このメソッドをオーバーライドする必要があります。 オーバーライドされたメソッドが記述子(クラス、ルックアップまたは操作)内のメソッド型以外を変更するか、nullを返す場合、AssertionErrorchangeMethodType(MethodType)からスローされます。
      パラメータ:
      newMethodType - 新しいメソッド型
      戻り値:
      変更されたメソッド・タイプを持つコール・サイト記述子。
    • changeOperation

      public final CallSiteDescriptor changeOperation(Operation newOperation)
      この記述子と操作のみが異なるコール・サイト記述子を検索または作成します。 changeOperationInternal(Operation)を呼び出します。
      パラメータ:
      newOperation - 新しい操作
      戻り値:
      変更された操作を含むコール・サイト記述子。
      例外:
      NullPointerException - newOperationがNULLの場合。
      SecurityException - 記述子のルックアップがMethodHandles.publicLookup()ではなく、セキュリティ・マネージャが存在し、RuntimePermission("dynalink.getLookup")のチェックが失敗した場合。 これは、呼び出しサイト記述子内の操作を変更することで、ルックアップを使用して任意の操作に対して記述子を作成できるので必要です。
    • changeOperationInternal

      protected CallSiteDescriptor changeOperationInternal(Operation newOperation)
      この記述子と操作のみが異なるコール・サイト記述子を検索または作成します。 サブクラスは、その正確なクラスのオブジェクトを返すため、このメソッドをオーバーライドする必要があります。 オーバーライドされたメソッドが記述子(クラス、ルックアップまたはメソッド・タイプ)の操作以外を変更するか、nullを返す場合、changeOperation(Operation)からAssertionErrorがスローされます。
      パラメータ:
      newOperation - 新しい操作
      戻り値:
      変更された操作を含むコール・サイト記述子。
    • equals

      public boolean equals(Object obj)
      このコール・サイト記述子が渡されたオブジェクトと等しい場合はtrueを返します。 他のオブジェクトがまったく同じクラスで、それらの操作とメソッド・タイプが等しく、それらのルックアップのMethodHandles.Lookup.lookupClass()MethodHandles.Lookup.lookupModes()が同じである場合、同じとみなされます。
      オーバーライド:
      equals、クラスObject
      パラメータ:
      obj - 比較対象の参照オブジェクト。
      戻り値:
      このオブジェクトがobj引数と同じである場合はtrue、それ以外の場合はfalse
      関連項目:
    • hashCode

      public int hashCode()
      操作、メソッド・タイプおよびルックアップ・オブジェクトのルックアップ・クラスおよびルックアップ・モードから計算された、このコール・サイト記述子の値ベースのハッシュ・コードを返します。
      オーバーライド:
      hashCode、クラスObject
      戻り値:
      このコール・サイト記述子の値ベースのハッシュ・コード。
      関連項目:
    • toString

      public String toString()
      name(parameterTypes)returnType@lookupという形式の、このコール・サイト記述子の文字列表現を返します。
      オーバーライド:
      toString、クラスObject
      戻り値:
      このオブジェクトの文字列表現