Класс SerializedLambda
- Все реализуемые интерфейсы:
Serializable
public final class SerializedLambda extends Object implements Serializable
Ожидается, что реализации сериализуемых лямбда-выражений, такие как компиляторы или библиотеки среды выполнения языка, будут обеспечивать корректную десериализацию экземпляров. Один из способов сделать это — обеспечить, чтобы метод writeReplace возвращал экземпляр SerializedLambda, а не позволять выполняться сериализации по умолчанию.
SerializedLambda имеет метод readResolve, который ищет (возможно, private) static-метод с именем $deserializeLambda$(SerializedLambda) в захватывающем классе, вызывает его, передавая этот объект в качестве первого аргумента, и возвращает результат. Классы лямбда-выражений, реализующие $deserializeLambda$, отвечают за проверку того, что свойства SerializedLambda согласуются с лямбда-выражением, действительно захваченным этим классом.
Идентификатор функционального объекта, созданного при десериализации сериализованной формы, непредсказуем, поэтому операции, зависящие от идентификатора (например, сравнение ссылок, блокировка объекта и System.identityHashCode()), могут давать разные результаты в разных реализациях или даже при разных десериализациях в одной и той же реализации.
- Начиная с:
- 1.8
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
SerializedLambda |
Создает SerializedLambda на основе низкоуровневой информации, имеющейся в месте вызова фабрики лямбда-выражений. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Object |
getCapturedArg |
Получает динамический аргумент места захвата лямбда-выражения. |
int |
getCapturedArgCount() |
Получает количество динамических аргументов места захвата лямбда-выражения. |
String |
getCapturingClass() |
Получает имя класса, захватившего это лямбда-выражение. |
String |
getFunctionalInterfaceClass() |
Получает имя вызываемого типа, к которому было преобразовано это лямбда-выражение. |
String |
getFunctionalInterfaceMethodName() |
Получает имя основного метода функционального интерфейса, к которому было преобразовано это лямбда-выражение. |
String |
getFunctionalInterfaceMethodSignature() |
Получает сигнатуру основного метода функционального интерфейса, к которому было преобразовано это лямбда-выражение. |
String |
getImplClass() |
Получает имя класса, содержащего метод реализации. |
int |
getImplMethodKind() |
Получает тип дескриптора метода (см. MethodHandleInfo) метода реализации. |
String |
getImplMethodName() |
Получает имя метода реализации. |
String |
getImplMethodSignature() |
Получает сигнатуру метода реализации. |
final String |
getInstantiatedMethodType() |
Получает сигнатуру основного метода функционального интерфейса после подстановки вместо переменных типов их конкретных типов из места захвата. |
Подробное описание конструкторов
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, 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