模块  java.base
软件包  java.lang.invoke

Class SerializedLambda

  • 实现的所有接口
    Serializable

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

    可序列化lambda的实现者,例如编译器或语言运行库,应该确保实例正确地反序列化。 一个是指这样做是为了确保writeReplace方法返回的实例SerializedLambda ,而不是让默认序列化进行。

    SerializedLambda有一个readResolve方法,它在捕获类中查找名为$deserializeLambda$(SerializedLambda)的(可能是私有的)静态方法,并将其自身作为第一个参数调用,并返回结果。 实施LAMBDA类$deserializeLambda$负责验证了的性质SerializedLambda是由该类实际拍摄的拉姆达一致。

    通过反序列化序列化表单生成的函数对象的标识是不可预测的,因此标识敏感操作(例如引用相等,对象锁定和System.identityHashCode()可能在不同的实现中产生不同的结果,或者甚至在同一实现中的不同反序列化时产生不同的结果。

    从以下版本开始:
    1.8
    另请参见:
    LambdaMetafactorySerialized Form
    • 构造方法详细信息

      • SerializedLambda

        public SerializedLambda​(<?> 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捕获的变量
    • 方法详细信息

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