Spec-Zone.ru › OpenJDK 25

Класс SerializedLambda

java.lang.Object
java.lang.invoke.SerializedLambda
Все реализуемые интерфейсы:
Serializable
public final class SerializedLambda extends Object implements Serializable
Сериализованная форма лямбда-выражения. Свойства этого класса представляют информацию, имеющуюся в месте вызова фабрики лямбда-выражений, включая статические аргументы metafactory, такие как идентификатор основного метода функционального интерфейса и идентификатор метода реализации, а также динамические аргументы metafactory, такие как значения, захваченные из лексической области видимости в момент захвата лямбда-выражения.

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

SerializedLambda имеет метод readResolve, который ищет (возможно, private) static-метод с именем $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()
Получает сигнатуру метода реализации.
final String getInstantiatedMethodType()
Получает сигнатуру основного метода функционального интерфейса после подстановки вместо переменных типов их конкретных типов из места захвата.

Методы, объявленные в классе 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 — аргумент для захвата
Возвращает:
динамический аргумент места захвата лямбда-выражения

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, 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/25/docs/api/java.base/java/lang/invoke/SerializedLambda.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API