Spec-Zone.ru › OpenJDK 25

Класс ConstantBootstraps

java.lang.Object
java.lang.invoke.ConstantBootstraps
public final class ConstantBootstraps extends Object
Методы начальной загрузки для динамически вычисляемых констант.

Методы начальной загрузки в этом классе выбрасывают NullPointerException для любого аргумента-ссылки, который является null, если только не указано, что аргумент не используется или принимает значение null.

Начиная с:
11

Краткое описание методов

Модификатор и тип Метод Описание
static VarHandle arrayVarHandle(MethodHandles.Lookup lookup, String name, Class<VarHandle> type, Class<?> arrayClass)
Находит VarHandle для типа массива.
static <E extends Enum<E>>
E
enumConstant(MethodHandles.Lookup lookup, String name, Class<E> type)
Возвращает константу enum типа, указанного в type, с именем, указанным в name.
static Object explicitCast(MethodHandles.Lookup lookup, String name, Class<?> dstType, Object value)
Применяет преобразование из исходного типа в целевой тип.
static VarHandle fieldVarHandle(MethodHandles.Lookup lookup, String name, Class<VarHandle> type, Class<?> declaringClass, Class<?> fieldType)
Находит VarHandle для поля экземпляра.
static Object getStaticFinal(MethodHandles.Lookup lookup, String name, Class<?> type)
Возвращает значение статического поля final, объявленного в классе, совпадающем с типом поля (или, для полей примитивных типов, объявленного в классе-оболочке).
static Object getStaticFinal(MethodHandles.Lookup lookup, String name, Class<?> type, Class<?> declaringClass)
Возвращает значение статического поля final.
static Object invoke(MethodHandles.Lookup lookup, String name, Class<?> type, MethodHandle handle, Object... args)
Возвращает результат вызова дескриптора метода с указанными аргументами.
static Object nullConstant(MethodHandles.Lookup lookup, String name, Class<?> type)
Возвращает ссылку на объект null для ссылочного типа, указанного в type.
static Class<?> primitiveClass(MethodHandles.Lookup lookup, String name, Class<?> type)
Возвращает зеркало Class для примитивного типа, дескриптор типа которого указан в name.
static VarHandle staticFieldVarHandle(MethodHandles.Lookup lookup, String name, Class<VarHandle> type, Class<?> declaringClass, Class<?> fieldType)
Находит VarHandle для статического поля.

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

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

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

nullConstant

public static Object nullConstant(MethodHandles.Lookup lookup, String name, Class<?> type)
Возвращает ссылку на объект null для ссылочного типа, указанного в type.
Параметры:
lookup — не используется
name — не используется
type — ссылочный тип
Возвращает:
значение null
Выбрасывает:
IllegalArgumentException — если type не является ссылочным типом

primitiveClass

public static Class<?> primitiveClass(MethodHandles.Lookup lookup, String name, Class<?> type)
Возвращает зеркало Class для примитивного типа, дескриптор типа которого указан в name.
Параметры:
lookup — не используется
name — дескриптор (JVMS 4.3) требуемого примитивного типа
type — требуемый тип результата (должен быть Class.class)
Возвращает:
зеркало Class
Выбрасывает:
IllegalArgumentException — если имя не является дескриптором примитивного типа или тип не является Class.class

enumConstant

public static <E extends Enum<E>> E enumConstant(MethodHandles.Lookup lookup, String name, Class<E> type)
Возвращает константу enum типа, указанного в type, с именем, указанным в name.
Параметры типа:
E — тип перечисления, для которого возвращается значение-константа
Параметры:
lookup — контекст поиска, описывающий класс, выполняющий операцию (обычно помещается в стек JVM)
name — имя возвращаемой константы, которое должно точно совпадать с именем константы перечисления указанного типа.
type — объект Class, описывающий тип перечисления, для которого возвращается константа
Возвращает:
константу указанного типа перечисления с заданным именем
Выбрасывает:
IllegalAccessError — если объявляющий класс или поле недоступны классу, выполняющему операцию
IllegalArgumentException — если указанный тип перечисления не содержит константы с заданным именем или указанный объект класса не представляет тип перечисления
См. также:
  • Enum.valueOf(Class, String)

getStaticFinal

public static Object getStaticFinal(MethodHandles.Lookup lookup, String name, Class<?> type, Class<?> declaringClass)
Возвращает значение статического поля final.
Параметры:
lookup — контекст поиска, описывающий класс, выполняющий операцию (обычно помещается в стек JVM)
name — имя поля
type — тип поля
declaringClass — класс, в котором объявлено поле
Возвращает:
значение поля
Выбрасывает:
IllegalAccessError — если объявляющий класс или поле недоступны классу, выполняющему операцию
NoSuchFieldError — если указанное поле не существует
IncompatibleClassChangeError — если указанное поле не является final

getStaticFinal

public static Object getStaticFinal(MethodHandles.Lookup lookup, String name, Class<?> type)
Возвращает значение статического поля final, объявленного в классе, совпадающем с типом поля (или, для полей примитивных типов, объявленного в классе-оболочке). Это упрощённая форма getStaticFinal(MethodHandles.Lookup, String, Class, Class) для случая, когда класс объявляет выделенные экземпляры-константы самого себя.
Параметры:
lookup — контекст поиска, описывающий класс, выполняющий операцию (обычно помещается в стек JVM)
name — имя поля
type — тип поля
Возвращает:
значение поля
Выбрасывает:
IllegalAccessError — если объявляющий класс или поле недоступны классу, выполняющему операцию
NoSuchFieldError — если указанное поле не существует
IncompatibleClassChangeError — если указанное поле не является final
См. также:
  • getStaticFinal(MethodHandles.Lookup, String, Class, Class)

invoke

public static Object invoke(MethodHandles.Lookup lookup, String name, Class<?> type, MethodHandle handle, Object... args) throws Throwable
Возвращает результат вызова дескриптора метода с указанными аргументами.

Этот метод действует так, как если бы вызываемый дескриптор метода был получен в результате адаптации заданного дескриптора метода с помощью MethodHandle.asType(MethodType) для настройки типа возвращаемого значения в соответствии с требуемым типом.

Параметры:
lookup — не используется
name — не используется
type — требуемый тип возвращаемого значения, который должен быть совместим с типом возвращаемого значения дескриптора метода
handle — вызываемый дескриптор метода
args — аргументы, передаваемые дескриптору метода, как при использовании MethodHandle.invokeWithArguments(Object...). Каждый аргумент может быть null.
Возвращает:
результат вызова дескриптора метода
Выбрасывает:
WrongMethodTypeException — если тип метода дескриптора нельзя настроить для получения заданного количества аргументов или тип возвращаемого значения дескриптора нельзя настроить в соответствии с требуемым типом
ClassCastException — если аргумент или результат вызова дескриптора нельзя преобразовать приведением ссылочного типа
Throwable — любое исключение, выброшенное при вызове дескриптора метода

fieldVarHandle

public static VarHandle fieldVarHandle(MethodHandles.Lookup lookup, String name, Class<VarHandle> type, Class<?> declaringClass, Class<?> fieldType)
Находит VarHandle для поля экземпляра.
Параметры:
lookup — контекст поиска, описывающий класс, выполняющий операцию (обычно помещается в стек JVM)
name — имя поля
type — требуемый тип результата (должен быть Class<VarHandle>)
declaringClass — класс, в котором объявлено поле
fieldType — тип поля
Возвращает:
VarHandle
Выбрасывает:
IllegalAccessError — если объявляющий класс или поле недоступны классу, выполняющему операцию
NoSuchFieldError — если указанное поле не существует
IllegalArgumentException — если тип не является VarHandle

staticFieldVarHandle

public static VarHandle staticFieldVarHandle(MethodHandles.Lookup lookup, String name, Class<VarHandle> type, Class<?> declaringClass, Class<?> fieldType)
Находит VarHandle для статического поля.
Параметры:
lookup — контекст поиска, описывающий класс, выполняющий операцию (обычно помещается в стек JVM)
name — имя поля
type — требуемый тип результата (должен быть Class<VarHandle>)
declaringClass — класс, в котором объявлено поле
fieldType — тип поля
Возвращает:
VarHandle
Выбрасывает:
IllegalAccessError — если объявляющий класс или поле недоступны классу, выполняющему операцию
NoSuchFieldError — если указанное поле не существует
IllegalArgumentException — если тип не является VarHandle

arrayVarHandle

public static VarHandle arrayVarHandle(MethodHandles.Lookup lookup, String name, Class<VarHandle> type, Class<?> arrayClass)
Находит VarHandle для типа массива.
Параметры:
lookup — контекст поиска, описывающий класс, выполняющий операцию (обычно помещается в стек JVM)
name — не используется
type — требуемый тип результата (должен быть Class<VarHandle>)
arrayClass — тип массива
Возвращает:
VarHandle
Выбрасывает:
IllegalAccessError — если тип компонента массива недоступен классу, выполняющему операцию
IllegalArgumentException — если тип не является VarHandle

explicitCast

public static Object explicitCast(MethodHandles.Lookup lookup, String name, Class<?> dstType, Object value) throws ClassCastException
Применяет преобразование из исходного типа в целевой тип.

Для целевого типа dstType и входного значения value произойдёт одно из следующего:

  • Если dstType — это void.class, выбрасывается ClassCastException.
  • Если dstType — это Object.class, value возвращается без изменений.

В противном случае к value применяется одно из следующих преобразований:

  1. Если dstType является ссылочным типом, к value применяется приведение ссылочного типа, как если бы был вызван dstType.cast(value).
  2. Если dstType является примитивным типом, то, если тип value во время выполнения является типом-оболочкой примитивного типа (например, Integer), применяется распаковка Java 5.1.8, за которой следует преобразование приведения типов Java 5.5, преобразующее значение непосредственно в dstType либо, если dstType — это boolean, в int, которое затем преобразуется в true или false в зависимости от того, равен ли младший значащий бит 1 или 0 соответственно. Если тип value во время выполнения не является типом-оболочкой примитивного типа, выбрасывается ClassCastException.

Результат совпадает с результатом выполнения следующего кода:

MethodHandle id = MethodHandles.identity(dstType);
MethodType mt = MethodType.methodType(dstType, Object.class);
MethodHandle conv = MethodHandles.explicitCastArguments(id, mt);
return conv.invoke(value);
Параметры:
lookup — не используется
name — не используется
dstType — целевой тип преобразования
value — преобразуемое значение
Возвращает:
преобразованное значение
Выбрасывает:
ClassCastException — если dstType — это void, если не удаётся выполнить приведение по правилу (1) или если dstType является примитивным типом, а тип value во время выполнения не является типом-оболочкой примитивного типа (например, Integer)
Начиная с:
15

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по 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/ConstantBootstraps.html

Spec-Zone.ru

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