モジュール java.base
パッケージ java.lang.invoke

クラスSerializedLambda

java.lang.Object
java.lang.invoke.SerializedLambda
すべての実装されたインタフェース:
Serializable

public final class SerializedLambda extends Object implements Serializable
ラムダ式の直列化された形式。 このクラスのプロパティは、静的メタファクトリ引数(プライマリ関数型インタフェース・メソッドの識別情報、実装メソッドの識別情報など)と動的メタファクトリ引数(ラムダ・キャプチャ時に字句スコープからキャプチャされた値など)を含む、ラムダ・ファクトリ・サイトに存在する情報を表します。

インスタンスが適切に直列化復元することを保証するために、直列化可能ラムダの実装(コンパイラ、言語ランタイム・ライブラリなど)が要求されます。 そのための1つの方法は、writeReplaceメソッドがデフォルト直列化の処理を許可するのではなくSerializedLambdaのインスタンスを返すことを保証することです。

SerializedLambdaには、キャプチャ・クラス内で$deserializeLambda$(SerializedLambda)と呼ばれるstaticメソッド(privateの可能性がある)を見つけ、自身を最初の引数としてそれを呼び出し、結果を返す、readResolveメソッドが用意されています。 $deserializeLambda$を実装するラムダ・クラスは、SerializedLambdaのプロパティがそのクラスによって実際にキャプチャされるラムダと一貫性を持つかどうかの検証を担当します。

直列化された形式を直列化復元して生成された関数オブジェクトの識別は予測できないため、Idに依存する操作(参照の等価性、オブジェクトのロック、System.identityHashCode()など)によって、実装が異なる場合や、同じ実装の異なる直列化復元時にも異なる結果が生成される場合があります。

導入されたバージョン:
1.8
関連項目:
LambdaMetafactory直列化された形式
  • コンストラクタの詳細

    • SerializedLambda

      public SerializedLambda(Class<?> capturingClass, String functionalInterfaceClass, String functionalInterfaceMethodName, String functionalInterfaceMethodSignature, int implMethodKind, String implClass, String implMethodName, String implMethodSignature, String instantiatedMethodType, Object[] capturedArgs)
      ラムダ・ファクトリ・サイトに存在する低レベル情報からSerializedLambdaを作成します。
      パラメータ:
      capturingClass - ラムダ式が出現するクラス
      functionalInterfaceClass - 返されるラムダ・オブジェクトの静的型の名前(スラッシュ区切り形式)
      functionalInterfaceMethodName - ラムダ・ファクトリ・サイトに存在する関数型インタフェース・メソッドの名前
      functionalInterfaceMethodSignature - ラムダ・ファクトリ・サイトに存在する関数型インタフェース・メソッドのシグネチャ
      implMethodKind - 実装メソッドのメソッド・ハンドルの種類
      implClass - 実装メソッドを保持するクラスの名前(スラッシュ区切り形式)
      implMethodName - 実装メソッドの名前
      implMethodSignature - 実装メソッドのシグネチャ
      instantiatedMethodType - 型変数がキャプチャ・サイトからのインスタンス化で置換された後の、プライマリ関数型インタフェース・メソッドのシグネチャ
      capturedArgs - ラムダによってキャプチャされた変数を表す、ラムダ・キャプチャ・サイトへの動的引数
  • メソッドの詳細

    • getCapturingClass

      public String getCapturingClass()
      このラムダをキャプチャしたクラスの名前を取得します。
      戻り値:
      このラムダをキャプチャしたクラスの名前
    • getFunctionalInterfaceClass

      public String getFunctionalInterfaceClass()
      このラムダが変換された後の、呼び出される型の名前を取得します。
      戻り値:
      このラムダが変換された後の、関数型インタフェース・クラスの名前
    • getFunctionalInterfaceMethodName

      public String getFunctionalInterfaceMethodName()
      このラムダが変換された後の、関数型インタフェースのプライマリ・メソッドの名前を取得します。
      戻り値:
      関数型インタフェースのプライマリ・メソッドの名前
    • getFunctionalInterfaceMethodSignature

      public String getFunctionalInterfaceMethodSignature()
      このラムダが変換された後の、関数型インタフェースのプライマリ・メソッドのシグネチャを取得します。
      戻り値:
      関数型インタフェースのプライマリ・メソッドのシグネチャ
    • getImplClass

      public String getImplClass()
      実装メソッドを含むクラスの名前を取得します。
      戻り値:
      実装メソッドを含むクラスの名前
    • getImplMethodName

      public String getImplMethodName()
      実装メソッドの名前を取得します。
      戻り値:
      実装メソッドの名前
    • getImplMethodSignature

      public String getImplMethodSignature()
      実装メソッドのシグネチャを取得します。
      戻り値:
      実装メソッドのシグネチャ
    • getImplMethodKind

      public int getImplMethodKind()
      実装メソッドのメソッド・ハンドルの種類(MethodHandleInfoを参照)を取得します。
      戻り値:
      実装メソッドのメソッド・ハンドルの種類
    • getInstantiatedMethodType

      public final String getInstantiatedMethodType()
      型変数がキャプチャ・サイトからのインスタンス化で置換された後の、プライマリ関数型インタフェース・メソッドのシグネチャを取得します。
      戻り値:
      型変数処理後の、プライマリ関数型インタフェース・メソッドのシグネチャ
    • getCapturedArgCount

      public int getCapturedArgCount()
      ラムダ・キャプチャ・サイトへの動的引数のカウントを取得します。
      戻り値:
      ラムダ・キャプチャ・サイトへの動的引数のカウント
    • getCapturedArg

      public Object getCapturedArg(int i)
      ラムダ・キャプチャ・サイトへの動的引数を取得します。
      パラメータ:
      i - キャプチャする引数
      戻り値:
      ラムダ・キャプチャ・サイトへの動的引数