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
ConstructorsConstructorDescriptionSerializedLambda(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捕获站点的动态参数
-