Класс SerializedLambda

Все реализованные интерфейсы:
Serializable
public final class SerializedLambda
extends Object
implements Serializable

Сериализованная форма лямбда-выражения. Свойства этого класса представляют информацию, которая присутствует в месте создания лямбда-объекта, включая аргументы статической метафабрики, такие как идентификатор основного метода функционального интерфейса и идентификатор метода реализации, а также аргументы динамической метафабрики, такие как значения, захваченные из лексической области видимости в момент захвата лямбда-выражения.

Реализаторы сериализуемых лямбда-выражений, такие как компиляторы или языковые среды выполнения, должны гарантировать правильную десериализацию экземпляров. Одним из способов сделать это является обеспечение того, что метод writeReplace возвращает экземпляр SerializedLambda, а не позволяет проходить по умолчанию сериализацию.

Класс SerializedLambda имеет метод readResolve, который ищет (возможно, закрытый) статический метод $deserializeLambda$(SerializedLambda) в захватывающем классе, вызывает его с самим собой в качестве первого аргумента и возвращает результат. Классы лямбда-выражений, реализующие $deserializeLambda$, несут ответственность за проверку того, что свойства SerializedLambda согласуются с лямбда-выражением, фактически захваченным этим классом.

Идентификатор объекта функции, полученного при десериализации сериализованной формы, непредсказуем, и поэтому операции, чувствительные к идентификатору (такие как равенство ссылок, блокировка объектов и System.identityHashCode()), могут давать разные результаты в разных реализациях или даже при разных десериализациях в одной и той же реализации.

С тех пор:
1.8
См. также:
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()

Получить сигнатуру основного метода функционального интерфейса после подстановки переменных типа их экземплярами из места захвата.

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание конструкторов

SerializedLambda

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 - Динамические аргументы места создания лямбды, представляющие переменные, захваченные лямбдой

Подробное описание методов

getCapturingClass

public String getCapturingClass()

Получить имя класса, который захватил эту лямбду.

Возвращает:
имя класса, который захватил эту лямбду

getFunctionalInterfaceClass

public String getFunctionalInterfaceClass()

Получить имя вызываемого типа, в который преобразована эта лямбда.

Возвращает:
имя класса функционального интерфейса, в который преобразована эта лямбда

getFunctionalInterfaceMethodName

public String getFunctionalInterfaceMethodName()

Получить имя основного метода функционального интерфейса, в который преобразована эта лямбда.

Возвращает:
имя основного метода функционального интерфейса

getFunctionalInterfaceMethodSignature

public String getFunctionalInterfaceMethodSignature()

Получить сигнатуру основного метода функционального интерфейса, в который преобразована эта лямбда.

Возвращает:
сигнатура основного метода функционального интерфейса

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()

Получить количество динамических аргументов для места захвата лямбда-выражения.

Возвращает:
количество динамических аргументов для места захвата лямбда-выражения

getCapturedArg

public Object getCapturedArg(int i)

Получить динамический аргумент для места захвата лямбда-выражения.

Параметры:
i - аргумент для захвата
Возвращает:
динамический аргумент для места захвата лямбда-выражения

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/invoke/SerializedLambda.html

Spec-Zone .ru
спецификации, руководства, описания, API