クラスClassValue<T>

java.lang.Object
java.lang.ClassValue<T>
型パラメータ:
T - 関連付けられた値のタイプ

public abstract class ClassValue<T> extends Object
計算された値を任意のClassオブジェクトに遅延に関連付けます。 たとえば動的言語は、メッセージ送信コール・サイトで検出されたクラスごとにメッセージ・ディスパッチ表を構築する必要がある場合に、メッセージ送信をすばやく実行するために必要な情報を、検出されたクラスごとにClassValueを使ってキャッシュ内に格納できます。

ClassValueの基本的な操作はgetで、computeValueへの呼出しによって最初に作成された、関連付けられた値を返します。複数の呼出しは競合時に発生する可能性がありますが、1つの値がClassに関連付けられて返されます。

もう1つの操作はremoveで、関連付けられた値(存在する場合)がクリアされ、次の関連する値が、削除によって最新の入力状態で計算されるようになります。

特定の関連付けでは、関連する値へのアクセス順序が合計されます。 アクセスはアトミックです。次のものが含まれます。

  • getによる読取り専用アクセス
  • getによるcomputeValueの戻り値の関連付けの試行
  • removeによるアソシエーションのクリア
getコールには常に少なくとも1つのアクセスが含まれます。removeコールには常に1つのアクセスがあり、computeValueコールは常に2つのアクセスの間に発生します。 これにより、removeコールに関するcomputeValueコールの順序が確立され、computeValueの結果を getによって正常に関連付けることができるかどうかが決定されます。

導入されたバージョン:
1.7
  • コンストラクタのサマリー

    コンストラクタ
    修飾子
    コンストラクタ
    説明
    protected
    唯一のコンストラクタです。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    protected abstract T
    指定されたClassに関連付ける値を計算します。
    get(Class<?> type)
    指定されたClassに関連付けられた値を返します。
    void
    remove(Class<?> type)
    指定されたClassの関連値を削除し、すべての古い計算を無効にします。

    クラスオブジェクトで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • コンストラクタの詳細

    • ClassValue

      protected ClassValue()
      唯一のコンストラクタです。 (サブクラスのコンストラクタによる呼出し用で、通常は暗黙的に呼び出されます。)
  • メソッドの詳細

    • computeValue

      protected abstract T computeValue(Class<?> type)
      指定されたClassに関連付ける値を計算します。

      このメソッドは、getによる初期読取り専用アクセスで関連付けられた値が見つからない場合に起動されます。

      このメソッドが例外をスローした場合、開始するgetコールは値の関連付けを試行せず、関連する値が存在する場合はその値を返すか、それ以外の場合はその例外を伝播することで終了することがあります。

      それ以外の場合は、値が計算されて返されます。 戻り値を関連付けようとすると、次のいずれかの結果が発生します。

      • 関連付けられた値が存在し、返され、関連付けは行われません。
      • 最新のremoveコール(存在する場合)は、関連付ける値を計算したcomputeValueの終了(JLS 17.4.5)の前に発生しません。 removeコールが前に行われる computeValueへの新しい呼出しは、この事前の関係を再確立します。
      • それ以外の場合、この値は正常に関連付けられ、返されます。

      APIのノート:
      computeValueコールは、クラス・ロードまたはその他の状況のために、同じtypeに対してgetまたはremoveを再帰的にコールする場合があります。 再帰的getは、再帰が停止した場合、正常に終了し、この開始getは、関連する再帰からの値を監視します。 再帰的removeはno-opです。同じスレッド上にあるため、removeはこのcomputeValueの終了前にすでに発生しています。この computeValueの結果は引き続き関連付けることができます。
      パラメータ:
      type - 値を関連付けるClass
      戻り値:
      関連付ける新しく計算された値
      関連項目:
    • get

      public T get(Class<?> type)
      指定されたClassに関連付けられた値を返します。

      このメソッドは、最初に読取り専用アクセスを実行し、関連する値が存在する場合はその値を返します。 それ以外の場合、このメソッドは、computeValue呼出しから、競合するスレッドによって関連付けられる可能性のある関連値が存在するまで、値を関連付けようとします。

      このメソッドは、computeValue呼出しから例外をスローすることがあります。 この場合、関連付けは行われません。

      パラメータ:
      type - 関連する値を取得するClass
      戻り値:
      指定されたClassに関連付けられた値
      スロー:
      NullPointerException - 引数がnullの場合
      関連項目:
    • remove

      public void remove(Class<?> type)
      指定されたClassの関連値を削除し、すべての古い計算を無効にします。 この関連付けが後でアクセスされる場合、この削除は、関連付けられた値を返したcomputeValueコールの終了(JLS 17.4.5)の前に行われます。
      パラメータ:
      type - クラス値を削除する必要のある型
      スロー:
      NullPointerException - 引数がnullの場合