Spec-Zone.ru › OpenJDK 27

Интерфейс ConstantDesc

Все известные подынтерфейсы:
ClassDesc, DirectMethodHandleDesc, MethodHandleDesc, MethodTypeDesc
public sealed interface ConstantDesc permits ClassDesc, MethodHandleDesc, MethodTypeDesc, Double, DynamicConstantDesc<T>, Float, Integer, Long, String
Номинальный дескриптор загружаемого значения константы, определённый в JVMS §4.4. Такой дескриптор можно разрешить с помощью resolveConstantDesc(MethodHandles.Lookup), чтобы получить само значение константы.

Имена классов в номинальном дескрипторе, как и имена классов в пуле констант файла класса, должны интерпретироваться относительно определённого загрузчика классов, который не является частью номинального дескриптора.

Статические константы, которые могут быть непосредственно представлены в пуле констант (String, Integer, Long, Float и Double), реализуют ConstantDesc и служат номинальными дескрипторами для самих себя. Собственные связываемые константы (Class, MethodType и MethodHandle) имеют соответствующие типы ConstantDesc: ClassDesc, MethodTypeDesc и MethodHandleDesc. Другие константы представлены подтипами DynamicConstantDesc.

В API, предназначенных для генерации или анализа байт-кода, рекомендуется использовать ConstantDesc для описания операнда инструкции ldc (включая динамические константы), статических аргументов загрузчика динамических констант и инструкций invokedynamic, а также других байт-кодов или структур файлов классов, использующих пул констант.

Константы, описывающие различные распространённые константы (например, экземпляры ClassDesc для платформенных типов), можно найти в ConstantDescs.

Реализации ConstantDesc должны быть неизменяемыми, а их поведение не должно зависеть от идентичности объекта.

Классы, не относящиеся к платформе, не должны непосредственно реализовывать ConstantDesc. Вместо этого они должны расширять DynamicConstantDesc (как это делают Enum.EnumDesc и VarHandle.VarHandleDesc).

Номинальные дескрипторы следует сравнивать с помощью метода Object.equals(Object). Нет гарантии, что какая-либо сущность всегда будет представлена одним и тем же экземпляром дескриптора.

См. Спецификацию виртуальной машины Java:
4.4. Пул констант
Граф запечатанной иерархии классов:
Sealed class hierarchy graph for ConstantDescSealed class hierarchy graph for ConstantDesc
С версии:
12
См. также:
  • Constable
  • ConstantDescs

Краткое описание методов

Модификатор и тип Метод Описание
Object resolveConstantDesc(MethodHandles.Lookup lookup)
Разрешает этот дескриптор с помощью рефлексии, эмулируя поведение разрешения, описанное в JVMS §5.4.3, и поведение управления доступом, описанное в JVMS §5.4.4.

Подробное описание методов

resolveConstantDesc

Object resolveConstantDesc(MethodHandles.Lookup lookup) throws ReflectiveOperationException
Разрешает этот дескриптор с помощью рефлексии, эмулируя поведение разрешения, описанное в JVMS §5.4.3, и поведение управления доступом, описанное в JVMS §5.4.4. Контекст разрешения и управления доступом задаётся параметром MethodHandles.Lookup. Кэширование полученного значения не выполняется.
Примечание к API:
Некоторые дескрипторы констант, например MethodTypeDesc, могут представлять значение, которое не может быть представлено сущностями времени выполнения. Попытки разрешить такие дескрипторы могут привести к ошибкам.
Параметры:
lookup — объект MethodHandles.Lookup, предоставляющий контекст разрешения имён и управления доступом
Возвращает:
разрешённое значение константы
Вызывает:
ReflectiveOperationException — если класс, метод или поле не удалось разрешить с помощью рефлексии в процессе разрешения
LinkageError — если возникает ошибка связывания
См. Спецификацию виртуальной машины Java:
5.4.3 Разрешение
5.4.4 Управление доступом

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, где представлены более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2026, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

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