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()
-