Класс SerializedLambda
- java.lang.Object
-
- java.lang.invoke.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) |
Создать |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Object |
getCapturedArg(int i) |
Получить динамический аргумент для места захвата лямбда-выражения. |
int |
getCapturedArgCount() |
Получить количество динамических аргументов для места захвата лямбда-выражения. |
String |
getCapturingClass() |
Получить имя класса, который захватил эту лямбду. |
String |
getFunctionalInterfaceClass() |
Получить имя вызываемого типа, в который преобразована эта лямбда. |
String |
getFunctionalInterfaceMethodName() |
Получить имя основного метода функционального интерфейса, в который преобразована эта лямбда. |
String |
getFunctionalInterfaceMethodSignature() |
Получить сигнатуру основного метода функционального интерфейса, в который преобразована эта лямбда. |
String |
getImplClass() |
Получить имя класса, содержащего метод реализации. |
int |
getImplMethodKind() |
Получить тип обработчика метода (см. |
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