Spec-Zone.ru › OpenJDK 21

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

Методы, унаследованные от класса 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)
Возвращает значение статического 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(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 является примитивным типом, то, если тип выполнения 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

© 1993, 2023, 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/21/docs/api/java.base/java/lang/invoke/ConstantBootstraps.html

Spec-Zone.ru

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