Интерфейс 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 |
Разрешает этот дескриптор рефлексивно, эмулируя поведение разрешения JVMS 5.4.3 и поведение контроля доступа JVMS 5.4.4. |
Подробное описание методов
resolveConstantDesc
Object resolveConstantDesc(MethodHandles.Lookup lookup) throws ReflectiveOperationException
MethodHandles.Lookup. Кэширование результирующего значения не выполняется.- Примечание API:
- MethodTypeDesc может представлять дескрипторы типов методов, которые не могут быть представлены MethodType, например, методы с более чем 255 слотами параметров, поэтому попытки разрешить их могут привести к ошибкам.
- Параметры:
-
lookup-MethodHandles.Lookupдля предоставления контекста разрешения имен и контроля доступа - Возвращает:
- разрешенное константное значение
- Исключения:
-
ReflectiveOperationException- если класс, метод или поле не удалось разрешить рефлексивно в ходе разрешения -
LinkageError- если произошла ошибка связывания - См. Спецификацию виртуальной машины Java:
- 5.4.3 Разрешение
5.4.4 Контроль доступа
© 1993, 2021, 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/17/docs/api/java.base/java/lang/constant/ConstantDesc.html