Интерфейс 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.