Класс ConstantBootstraps
public final class ConstantBootstraps extends Object
Методы инициализации в этом классе будут выбрасывать NullPointerException для любого аргумента-ссылки, который null, если не указано, что аргумент не используется или что он может принять null значение.
- Since:
- 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(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является примитивным типом, то, если тип выполнения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