public final class SerializedLambda extends Object implements Serializable
インスタンスが適切に直列化復元することを保証するために、直列化可能ラムダの実装(コンパイラ、言語ランタイム・ライブラリなど)が要求されます。そのための1つの方法は、writeReplace
メソッドがデフォルト直列化の処理を許可するのではなくSerializedLambda
のインスタンスを返すことを保証することです。
SerializedLambda
には、キャプチャ・クラス内で$deserializeLambda$(SerializedLambda)
と呼ばれるstaticメソッド(privateの可能性がある)を見つけ、自身を最初の引数としてそれを呼び出し、結果を返す、readResolve
メソッドが用意されています。$deserializeLambda$
を実装するラムダ・クラスは、SerializedLambda
のプロパティがそのクラスによって実際にキャプチャされるラムダと一貫性を持つかどうかの検証を担当します。
LambdaMetafactory
、直列化された形式コンストラクタと説明 |
---|
SerializedLambda(Class<?> capturingClass, String functionalInterfaceClass, String functionalInterfaceMethodName, String functionalInterfaceMethodSignature, int implMethodKind, String implClass, String implMethodName, String implMethodSignature, String instantiatedMethodType, Object[] capturedArgs)
ラムダ・ファクトリ・サイトに存在する低レベル情報から
SerializedLambda を作成します。 |
修飾子と型 | メソッドと説明 |
---|---|
Object |
getCapturedArg(int i)
ラムダ・キャプチャ・サイトへの動的引数を取得します。
|
int |
getCapturedArgCount()
ラムダ・キャプチャ・サイトへの動的引数のカウントを取得します。
|
String |
getCapturingClass()
このラムダをキャプチャしたクラスの名前を取得します。
|
String |
getFunctionalInterfaceClass()
このラムダが変換された後の、呼び出される型の名前を取得します。
|
String |
getFunctionalInterfaceMethodName()
このラムダが変換された後の、関数型インタフェースのプライマリ・メソッドの名前を取得します。
|
String |
getFunctionalInterfaceMethodSignature()
このラムダが変換された後の、関数型インタフェースのプライマリ・メソッドのシグネチャを取得します。
|
String |
getImplClass()
実装メソッドを含むクラスの名前を取得します。
|
int |
getImplMethodKind()
実装メソッドのメソッド・ハンドルの種類(
MethodHandleInfo を参照)を取得します。 |
String |
getImplMethodName()
実装メソッドの名前を取得します。
|
String |
getImplMethodSignature()
実装メソッドのシグネチャを取得します。
|
String |
getInstantiatedMethodType()
型変数がキャプチャ・サイトからのインスタンス化で置換された後の、プライマリ関数型インタフェース・メソッドのシグネチャを取得します。
|
String |
toString()
オブジェクトの文字列表現を返します。
|
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
- ラムダによってキャプチャされた変数を表す、ラムダ・キャプチャ・サイトへの動的引数public String getCapturingClass()
public String getFunctionalInterfaceClass()
public String getFunctionalInterfaceMethodName()
public String getFunctionalInterfaceMethodSignature()
public String getImplClass()
public String getImplMethodName()
public String getImplMethodSignature()
public int getImplMethodKind()
MethodHandleInfo
を参照)を取得します。public final String getInstantiatedMethodType()
public int getCapturedArgCount()
public Object getCapturedArg(int i)
i
- キャプチャする引数public String toString()
Object
toString
メソッドは、このオブジェクトを「テキストで表す」文字列を返します。この結果は、人間が読める簡潔で有益な情報であるべきです。すべてのサブクラスで、このメソッドをオーバーライドすることをお薦めします。
クラスObject
のtoString
メソッドは、オブジェクトがインスタンスになっている元のクラスの名前、アットマーク文字「@
」、およびオブジェクトのハッシュ・コードの符号なし16進数表現から構成される文字列を返します。つまり、このメソッドは次の値と等しい文字列を返します。
getClass().getName() + '@' + Integer.toHexString(hashCode())
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.