Spec-Zone.ru › OpenJDK 21

Пакет 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, как и пользовательские классы. Сущности, генерирующие файлы класса (например, компиляторы), могут использовать интроспекцию над объектами constable, чтобы получить более эффективный способ представления их значений в файлах класса.

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

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

См. Спецификацию виртуальной машины Java:
4.4 Константный пул
С тех пор:
12
Пакет Описание
java.lang
Предоставляет классы, которые являются фундаментальными для проектирования языка программирования Java.
Класс Описание
ClassDesc
A номинальный описатель для Class константы.
Constable
Представляет тип, который является 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, 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/constant/package-summary.html

Spec-Zone.ru

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