java.lang.Object
java.lang.invoke.SerializedLambda
- 所有已实现的接口:
-
Serializable
Lambda表达式的序列化形式。此类的属性表示Lambda工厂站点上存在的信息,包括静态元工厂参数,如主要功能接口方法的标识和实现方法的标识,以及动态元工厂参数,如在Lambda捕获时从词法范围捕获的值。
可序列化Lambda的实现者,如编译器或语言运行时库,应确保实例正确反序列化。一种方法是确保writeReplace
方法返回SerializedLambda
的实例,而不是允许默认序列化继续进行。
SerializedLambda
具有一个readResolve
方法,该方法在捕获类中查找一个(可能是私有的)名为$deserializeLambda$(SerializedLambda)
的静态方法,使用自身作为第一个参数调用该方法,并返回结果。实现$deserializeLambda$
的Lambda类负责验证SerializedLambda
的属性是否与该类实际捕获的Lambda一致。
反序列化序列化形式生成的函数对象的标识是不可预测的,因此对标识敏感的操作(如引用相等性、对象锁定和System.identityHashCode()
)可能在不同的实现中产生不同的结果,甚至在同一实现中进行不同的反序列化时也可能产生不同的结果。
- 自Java版本:
- 1.8
- 参见:
-
Constructor Summary
ConstructorDescriptionSerializedLambda
(Class<?> capturingClass, String functionalInterfaceClass, String functionalInterfaceMethodName, String functionalInterfaceMethodSignature, int implMethodKind, String implClass, String implMethodName, String implMethodSignature, String instantiatedMethodType, Object[] capturedArgs) 从Lambda工厂站点上存在的低级信息创建一个SerializedLambda
。 -
Method Summary
Modifier and TypeMethodDescriptiongetCapturedArg
(int i) 获取Lambda捕获站点的动态参数。int
获取Lambda捕获站点的动态参数计数。获取捕获此Lambda的类的名称。获取将此Lambda转换为的调用类型的名称获取将此Lambda转换为的主要功能接口方法的名称。获取将此Lambda转换为的主要功能接口方法的签名。获取包含实现方法的类的名称。int
获取实现方法的方法句柄类型(参见MethodHandleInfo
)。获取实现方法的名称。获取实现方法的签名。final String
在从捕获站点替换类型变量后,获取主要功能接口方法的签名。
-
Constructor Details
-
SerializedLambda
public SerializedLambda(Class<?> capturingClass, String functionalInterfaceClass, String functionalInterfaceMethodName, String functionalInterfaceMethodSignature, int implMethodKind, String implClass, String implMethodName, String implMethodSignature, String instantiatedMethodType, Object[] capturedArgs) 从Lambda工厂站点上存在的低级信息创建一个SerializedLambda
。- 参数:
-
capturingClass
- Lambda表达式所在的类 -
functionalInterfaceClass
- 返回的Lambda对象的静态类型的名称(以斜杠分隔的形式) -
functionalInterfaceMethodName
- Lambda工厂站点上主要功能接口方法的名称 -
functionalInterfaceMethodSignature
- Lambda工厂站点上主要功能接口方法的签名 -
implMethodKind
- 实现方法的方法句柄类型 -
implClass
- 包含实现方法的类的名称(以斜杠分隔的形式) -
implMethodName
- 实现方法的名称 -
implMethodSignature
- 实现方法的签名 -
instantiatedMethodType
- 从捕获站点替换类型变量后的主要功能接口方法的签名 -
capturedArgs
- Lambda工厂站点的动态参数,表示Lambda捕获的变量
-
-
Method Details
-
getCapturingClass
获取捕获此Lambda的类的名称。- 返回:
- 捕获此Lambda的类的名称
-
getFunctionalInterfaceClass
获取将此Lambda转换为的调用类型的名称- 返回:
- 将此Lambda转换为的功能接口类的名称
-
getFunctionalInterfaceMethodName
获取将此Lambda转换为的主要功能接口方法的名称。- 返回:
- 主要功能接口的方法的名称
-
getFunctionalInterfaceMethodSignature
获取将此Lambda转换为的主要功能接口方法的签名。- 返回:
- 主要功能接口的方法的签名
-
getImplClass
获取包含实现方法的类的名称。- 返回:
- 包含实现方法的类的名称
-
getImplMethodName
获取实现方法的名称。- 返回:
- 实现方法的名称
-
getImplMethodSignature
获取实现方法的签名。- 返回:
- 实现方法的签名
-
getImplMethodKind
public int getImplMethodKind()获取实现方法的方法句柄类型(参见MethodHandleInfo
)。- 返回:
- 实现方法的方法句柄类型
-
getInstantiatedMethodType
获取从捕获站点替换类型变量后的主要功能接口方法的签名。- 返回:
- 主要功能接口方法的签名经过类型变量处理后的签名
-
getCapturedArgCount
public int getCapturedArgCount()获取Lambda捕获站点的动态参数计数。- 返回:
- Lambda捕获站点的动态参数计数
-
getCapturedArg
获取Lambda捕获站点的动态参数。- 参数:
-
i
- 要捕获的参数 - 返回:
- Lambda捕获站点的动态参数
-