模块 java.base

接口 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 指令的静态引导参数,以及使用常量的其他字节码或类文件结构水池。

可以在 ConstantDescs 中找到描述各种通用常量的常量(例如 ClassDesc 平台类型的实例)。

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
参见: