public interface Constable
代表一种可常量化的类型。可常量化类型是其值为常量,可以在Java类文件的常量池中表示,如JVMS 4.4中所述,并且其实例可以名义上描述自己为一个
ConstantDesc
。
一些可常量化类型在常量池中具有本机表示: String
, Integer
, Long
, Float
, Double
, Class
, MethodType
, 和 MethodHandle
。类型 String
, Integer
, Long
, Float
, 和 Double
作为它们自己的名义描述符;Class
, MethodType
, 和 MethodHandle
具有相应的名义描述符 ClassDesc
, MethodTypeDesc
, 和 MethodHandleDesc
。
其他引用类型可以是可常量化的,如果它们的实例可以以名义形式描述自己为一个ConstantDesc
。在Java SE平台API中的示例是支持Java语言特性的类型,如 Enum
,以及运行时支持类,如 VarHandle
。这些通常用DynamicConstantDesc
描述,该类描述动态生成的常量(JVMS 4.4.10)。
可常量化类型的实例的名义形式可通过describeConstable()
获得。一个Constable 不一定能够(或者可能选择不)以ConstantDesc
的形式描述其所有实例;此方法返回一个Optional
,如果无法为实例创建名义描述符,则可以为空(例如,MethodHandle
将为直接方法句柄生成名义描述符,但不一定为方法句柄组合器生成的句柄)。
- 参见 Java虚拟机规范:
-
4.4 常量池
4.4.10CONSTANT_Dynamic_info
和CONSTANT_InvokeDynamic_info
结构
- 自 JDK 版本:
- 12
-
Method Summary
-
Method Details
-
describeConstable
Optional<? extends ConstantDesc> describeConstable()
-