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