Spec-Zone.ru › OpenJDK 25

Интерфейс 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, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 США.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/lang/constant/ConstantDesc.html

Spec-Zone.ru

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