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