Класс SerializedLambda
- Все реализованные интерфейсы:
Serializable
public final class SerializedLambda extends Object implements Serializable
Реализаторы сериализуемых лямбда-выражений, такие как компиляторы или языковые среды выполнения, должны гарантировать корректную десериализацию экземпляров. Одним из способов сделать это является обеспечение того, что метод writeReplace возвращает экземпляр SerializedLambda, а не позволяет по умолчанию сериализации продолжаться.
Класс SerializedLambda имеет метод readResolve, который ищет (возможно, приватный) статический метод, названный $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, 2021, 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/17/docs/api/java.base/java/lang/invoke/SerializedLambda.html