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(Class<?> capturingClass, String functionalInterfaceClass, String functionalInterfaceMethodName, String functionalInterfaceMethodSignature, int implMethodKind, String implClass, String implMethodName, String implMethodSignature, String instantiatedMethodType, Object[] capturedArgs)ラムダ・ファクトリ・サイトに存在する低レベル情報からSerializedLambdaを作成します。 -
メソッドのサマリー
修飾子と型 メソッド 説明 ObjectgetCapturedArg(int i)ラムダ・キャプチャ・サイトへの動的引数を取得します。intgetCapturedArgCount()ラムダ・キャプチャ・サイトへの動的引数のカウントを取得します。StringgetCapturingClass()このラムダをキャプチャしたクラスの名前を取得します。StringgetFunctionalInterfaceClass()このラムダが変換された後の、呼び出される型の名前を取得します。StringgetFunctionalInterfaceMethodName()このラムダが変換された後の、関数型インタフェースのプライマリ・メソッドの名前を取得します。StringgetFunctionalInterfaceMethodSignature()このラムダが変換された後の、関数型インタフェースのプライマリ・メソッドのシグネチャを取得します。StringgetImplClass()実装メソッドを含むクラスの名前を取得します。intgetImplMethodKind()実装メソッドのメソッド・ハンドルの種類(MethodHandleInfoを参照)を取得します。StringgetImplMethodName()実装メソッドの名前を取得します。StringgetImplMethodSignature()実装メソッドのシグネチャを取得します。StringgetInstantiatedMethodType()型変数がキャプチャ・サイトからのインスタンス化で置換された後の、プライマリ関数型インタフェース・メソッドのシグネチャを取得します。
-
コンストラクタの詳細
-
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- キャプチャする引数- 戻り値:
- ラムダ・キャプチャ・サイトへの動的引数
-