Spec-Zone.ru › OpenJDK 24

Пакет java.lang.constant

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

Каждый API, который читает и записывает инструкции байткода, должен моделировать операнды этих инструкций и другие структуры файлов класса (например, записи в таблице методов загрузки или карты стека, которые часто ссылаются на записи в пуле констант файла класса). Такие записи могут обозначать значения фундаментальных типов, такие как строки или целые числа; части программы, такие как классы или обработчики методов; или значения произвольных типов, определённых пользователем. Иерархия 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, которая будет проверять загрузку и, для известных загрузчиков, возвращать более конкретный подтип DynamicConstantDesc, такой как Enum.EnumDesc.

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

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

Другие члены этого пакета — ModuleDesc и PackageDesc. Они представляют структуры модулей и пакетов, пригодные для описания модулей и их содержимого в API чтения и записи байткода.

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

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

Spec-Zone.ru

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