Spec-Zone.ru › OpenJDK 24

Класс ConstantBootstraps

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

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

Since:
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)
Возвращает константу типа, указанного в 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)
Возвращает ссылку на объект типа-ссылку, указанного в 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 для статического поля.

Методы, унаследованные от класса java.lang.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)
Возвращает значение статического конечного поля.
Параметры:
lookup - контекст поиска, описывающий класс, выполняющий операцию (обычно стекируется JVM)
name - имя поля
type - тип поля
declaringClass - класс, в котором объявлено поле
Возвращает:
значение поля
Выбрасывает:
IllegalAccessError - если класс объявления или поле недоступно для класса, выполняющего операцию
NoSuchFieldError - если указанное поле не существует
IncompatibleClassChangeError - если указанное поле не является final

getStaticFinal

public static Object getStaticFinal(MethodHandles.Lookup lookup, String name, Class<?> type)
Возвращает значение статического конечного поля, объявленного в классе, который такой же, как тип поля (или, для примитивных полей, в классе-обертке). Это упрощенная форма 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(java.lang.invoke.MethodType) для корректировки типа возвращаемого значения до желаемого типа.

Параметры:
lookup - не используется
name - не используется
type - желаемый тип возвращаемого значения, который должен быть совместим с типом возвращаемого значения обработчика метода
handle - обработчик метода, который нужно вызвать
args - аргументы, которые нужно передать обработчику метода, как если бы с помощью MethodHandle.invokeWithArguments(java.lang.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 является примитивным типом, то если тип runtime объекта value является примитивным обёрткой (например, Integer), применяется преобразование разворачивания Java 5.1.8, за которым следует преобразование приведения Java 5.5, преобразуя либо напрямую в dstType, либо, если dstType является boolean, в int, которое затем преобразуется в либо true, либо в false в зависимости от того, равен ли наименее значимый бит 1 или 0 соответственно. Если тип runtime объекта 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 является примитивным типом, а тип runtime объекта value не является примитивной обёрткой (например, Integer)
С:
15

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/lang/invoke/ConstantBootstraps.html

Spec-Zone.ru

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