Интерфейс ConstantDesc
- Все известные подинтерфейсы:
ClassDesc, DirectMethodHandleDesc, MethodHandleDesc, MethodTypeDesc
public sealed interface ConstantDesc permits ClassDesc, MethodHandleDesc, MethodTypeDesc, Double, DynamicConstantDesc<T>, Float, Integer, Long, String
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 Пул констант
- Граф иерархии запечатанных классов:
- С версии:
- 12
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Object |
resolveConstantDesc |
Подробное описание методов
resolveConstantDesc
Object resolveConstantDesc(MethodHandles.Lookup lookup) throws ReflectiveOperationException
MethodHandles.Lookup. Кэширование полученного значения не выполняется.- Примечание API:
- Некоторые дескрипторы констант, например MethodTypeDesc, могут представлять значение, которое невозможно представить сущностями времени выполнения. Попытки разрешить такие значения могут привести к ошибкам.
- Параметры:
-
lookup—MethodHandles.Lookup, задающий разрешение имён и контекст управления доступом - Возвращает:
- разрешённое значение константы
- Выбрасывает:
-
ReflectiveOperationException— если класс, метод или поле не удалось разрешить с помощью рефлексии в процессе разрешения -
LinkageError— если происходит ошибка связывания - См. Спецификацию виртуальной машины Java:
- 5.4.3 Разрешение
5.4.4 Управление доступом
© 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