Module java.base
Package java.lang.invoke

Class SerializedLambda

java.lang.Object
java.lang.invoke.SerializedLambda
所有已实现的接口:
Serializable

public final class SerializedLambda extends Object implements Serializable
Lambda表达式的序列化形式。此类的属性表示Lambda工厂站点上存在的信息,包括静态元工厂参数,如主要功能接口方法的标识和实现方法的标识,以及动态元工厂参数,如在Lambda捕获时从词法范围捕获的值。

可序列化Lambda的实现者,如编译器或语言运行时库,应确保实例正确反序列化。一种方法是确保writeReplace方法返回SerializedLambda的实例,而不是允许默认序列化继续进行。

SerializedLambda具有一个readResolve方法,该方法在捕获类中查找一个(可能是私有的)名为$deserializeLambda$(SerializedLambda)的静态方法,使用自身作为第一个参数调用该方法,并返回结果。实现$deserializeLambda$的Lambda类负责验证SerializedLambda的属性是否与该类实际捕获的Lambda一致。

反序列化序列化形式生成的函数对象的标识是不可预测的,因此对标识敏感的操作(如引用相等性、对象锁定和System.identityHashCode())可能在不同的实现中产生不同的结果,甚至在同一实现中进行不同的反序列化时也可能产生不同的结果。

自Java版本:
1.8
参见:
  • 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

      public String getCapturingClass()
      获取捕获此Lambda的类的名称。
      返回:
      捕获此Lambda的类的名称
    • getFunctionalInterfaceClass

      public String getFunctionalInterfaceClass()
      获取将此Lambda转换为的调用类型的名称
      返回:
      将此Lambda转换为的功能接口类的名称
    • getFunctionalInterfaceMethodName

      public String getFunctionalInterfaceMethodName()
      获取将此Lambda转换为的主要功能接口方法的名称。
      返回:
      主要功能接口的方法的名称
    • getFunctionalInterfaceMethodSignature

      public String getFunctionalInterfaceMethodSignature()
      获取将此Lambda转换为的主要功能接口方法的签名。
      返回:
      主要功能接口的方法的签名
    • 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()
      获取Lambda捕获站点的动态参数计数。
      返回:
      Lambda捕获站点的动态参数计数
    • getCapturedArg

      public Object getCapturedArg(int i)
      获取Lambda捕获站点的动态参数。
      参数:
      i - 要捕获的参数
      返回:
      Lambda捕获站点的动态参数