Класс ConstantBootstraps
public final class ConstantBootstraps extends Object
Методы начальной загрузки в этом классе выбрасывают NullPointerException для любого аргумента-ссылки, который является null, если только не указано, что аргумент не используется или принимает значение null.
- Начиная с:
- 11
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static VarHandle |
arrayVarHandle |
Находит VarHandle для типа массива. |
static <E extends Enum<E>> |
enumConstant |
Возвращает константу enum типа, указанного в type, с именем, указанным в name. |
static Object |
explicitCast |
Применяет преобразование из исходного типа в целевой тип. |
static VarHandle |
fieldVarHandle |
Находит VarHandle для поля экземпляра. |
static Object |
getStaticFinal |
Возвращает значение статического поля final, объявленного в классе, совпадающем с типом поля (или, для полей примитивных типов, объявленного в классе-оболочке). |
static Object |
getStaticFinal |
Возвращает значение статического поля final. |
static Object |
invoke |
Возвращает результат вызова дескриптора метода с указанными аргументами. |
static Object |
nullConstant |
Возвращает ссылку на объект null для ссылочного типа, указанного в type. |
static Class |
primitiveClass |
Возвращает зеркало Class для примитивного типа, дескриптор типа которого указан в name. |
static VarHandle |
staticFieldVarHandle |
Находит VarHandle для статического поля. |
Подробное описание методов
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— если указанный тип перечисления не содержит константы с заданным именем или указанный объект класса не представляет тип перечисления - См. также:
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 - См. также:
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 применяется одно из следующих преобразований:
- Если
dstTypeявляется ссылочным типом, кvalueприменяется приведение ссылочного типа, как если бы был вызванdstType.cast(value). - Если
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, 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