Module java.base

Interface Constable


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.10 CONSTANT_Dynamic_infoCONSTANT_InvokeDynamic_info 结构
自 JDK 版本:
12
  • Method Summary

    Modifier and Type
    Method
    Description
    Optional<? extends ConstantDesc>
    返回一个包含此实例的名义描述符的Optional,如果可以构造一个,或者如果无法构造则返回一个空的Optional
  • Method Details

    • describeConstable

      Optional<? extends ConstantDesc> describeConstable()
      返回一个包含此实例的名义描述符的Optional,如果可以构造一个,或者如果无法构造则返回一个空的Optional
      返回:
      一个包含生成的名义描述符的Optional,如果无法构造则返回一个空的Optional