Spec-Zone.ru › OpenJDK 17

Класс 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)
Возвращает значение статического конечного поля.
Параметры:
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);
 
Parameters:
lookup - не используется
name - не используется
dstType - целевой тип преобразования
value - значение, подлежащее преобразованию
Returns:
преобразованное значение
Throws:
ClassCastException - когда dstType является void, когда приведение по (1) завершается неудачей или когда dstType является примитивным типом, а тип runtime value не является примитивным обертывающим типом (например, Integer)
Since:
15

© 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/ConstantBootstraps.html

Spec-Zone.ru

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