Spec-Zone.ru › OpenJDK 17

Пакет java.lang.constant

package java.lang.constant
Классы и интерфейсы для представления номинальных описателей для объектов во время выполнения, таких как классы или обработчики методов, и сущностей файлов класса, таких как записи пула констант или invokedynamic места вызова. Эти классы подходят для использования в API чтения и записи байткода, invokedynamic bootstrap-процессах, API встроенных операций байткода и инструментах анализа программ на этапе компиляции или компоновки.

Каждый API, который читает и записывает инструкции байткода, должен моделировать операнды этих инструкций и другие структуры файлов класса (например, записи в таблице методов bootstrap или карты стека, которые часто ссылаются на записи в пуле констант файла класса.) Такие записи могут обозначать значения фундаментальных типов, такие как строки или целые числа; части программы, такие как классы или обработчики методов; или значения произвольных типов, определённых пользователем. Иерархия ConstantDesc предоставляет представление записей пула констант в номинальной форме, удобное для API для моделирования операндов инструкций байткода.

Номинальные описатели

A ConstantDesc — это описание константного значения. Такое описание — номинальная форма константного значения; это не само значение, а скорее «рецепт» для описания значения, хранения значения в записи пула констант или восстановления значения с учётом контекста загрузки класса. Каждый ConstantDesc знает, как разрешить себя — вычислить значение, которое он описывает — с помощью ConstantDesc.resolveConstantDesc. Это позволяет API, принимающему объекты ConstantDesc, вычислять их рефлексивно, при условии, что классы и методы, указанные в их номинальном описании, присутствуют и доступны.

Подтипы ConstantDesc описывают различные виды константных значений. Для каждого типа загружаемой записи пула констант, определённого в JVMS 4.4, существует соответствующий подтип ConstantDesc: ClassDesc, MethodTypeDesc, DirectMethodHandleDesc, String, Integer, Long, Float, Double и DynamicConstantDesc. Эти классы предоставляют методы доступа, специфичные для типа, для извлечения номинальной информации для этого вида константы. Когда API записи байткода сталкивается с ConstantDesc, он должен проверить, к какому из этих типов он относится, привести его, извлечь его номинальную информацию и сгенерировать соответствующую запись в пуле констант. При столкновении API чтения байткода с записью пула констант он может преобразовать её в соответствующий тип номинального описателя. Для динамических констант API чтения байткода может захотеть использовать фабрику DynamicConstantDesc.ofCanonical, которая проверит bootstrap и, для известных bootstrap-процессов, вернёт более специфичный подтип DynamicConstantDesc, такой как Enum.EnumDesc.

Другой способ получения номинального описания значения — спросить само значение. Constable — это тип, значения которого могут описывать себя в номинальной форме как ConstantDesc. Фундаментальные типы, такие как String и Class, реализуют Constable, как и пользовательские классы. Сущности, которые генерируют файлы класса (например, компиляторы), могут просматривать объекты constable, чтобы получить более эффективный способ представления их значений в файлах класса.

Этот пакет также включает DynamicCallSiteDesc, который представляет запись пула констант (не загружаемую) Constant_InvokeDynamic_info. Он описывает метод bootstrap, имя и тип вызова, а также аргументы bootstrap, связанные с инструкцией invokedynamic. Он также подходит для описания invokedynamic мест вызова в API чтения и записи байткода.

См. Спецификацию виртуальной машины Java:
4.4 Пул констант
С:
12
Пакет Описание
java.lang
Предоставляет классы, являющиеся фундаментальными для разработки языка программирования Java.
Класс Описание
ClassDesc
A номинальный описатель для Class константы.
Constable
Представляет тип, который является constable.
ConstantDesc
A номинальный описатель для загружаемого константного значения, как определено в JVMS 4.4.
ConstantDescs
Предопределённые значения номинального описателя для общих констант, включая описатели типов классов примитивных типов и других общих платформных типов, а также описатели обработчиков методов для стандартных bootstrap-методов.
DirectMethodHandleDesc
A номинальный описатель для прямого MethodHandle.
DirectMethodHandleDesc.Kind
Виды обработчиков методов, которые могут быть описаны с помощью DirectMethodHandleDesc.
DynamicCallSiteDesc
A номинальный описатель для invokedynamic места вызова.
DynamicConstantDesc<T>
A номинальный описатель для динамической константы (описанной в пуле констант с Constant_Dynamic_info.)
MethodHandleDesc
A номинальный описатель для MethodHandle константы.
MethodTypeDesc
A номинальный описатель для MethodType константы.

© 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/constant/package-summary.html

Spec-Zone.ru

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