Класс 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является примитивным типом, то, если тип runtimevalueявляется примитивным обертывающим типом (например,Integer), применяется преобразование распаковки Java 5.1.8, за которым следует преобразование приведения Java 5.5, преобразующее либо непосредственно вdstType, либо, еслиdstTypeявляетсяboolean, вint, которое затем преобразуется вtrueилиfalseв зависимости от того, равен ли наименее значащий бит 1 или 0 соответственно. Если тип runtimevalueне является примитивным обертывающим типом, выбрасывается исключение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является примитивным типом, а тип runtimevalueне является примитивным обертывающим типом (например,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