Module java.base

Interface Constable


  • public interface Constable
    Represents a type which is constable. A constable type is one whose values are constants that can be represented in the constant pool of a Java classfile as described in JVMS 4.4, and whose instances can describe themselves nominally as a ConstantDesc.

    Some constable types have a native representation in the constant pool: String, Integer, Long, Float, Double, Class, MethodType, and MethodHandle. The types String, Integer, Long, Float, and Double serve as their own nominal descriptors; Class, MethodType, and MethodHandle have corresponding nominal descriptors ClassDesc, MethodTypeDesc, and MethodHandleDesc.

    Other reference types can be constable if their instances can describe themselves in nominal form as a ConstantDesc. Examples in the Java SE Platform API are types that support Java language features such as Enum, and runtime support classes such as VarHandle. These are typically described with a DynamicConstantDesc, which describes dynamically generated constants (JVMS 4.4.10).

    The nominal form of an instance of a constable type is obtained via describeConstable(). A Constable need not be able to (or may choose not to) describe all its instances in the form of a ConstantDesc; this method returns an Optional that can be empty to indicate that a nominal descriptor could not be created for an instance. (For example, MethodHandle will produce nominal descriptors for direct method handles, but not necessarily those produced by method handle combinators.)

    Since:
    12
    See The Java™ Virtual Machine Specification:
    4.4 The Constant Pool, 4.4.10 The CONSTANT_InvokeDynamic_info Structure
    • Method Summary

      Modifier and Type Method Description
      Optional<? extends ConstantDesc> describeConstable()
      Returns an Optional containing the nominal descriptor for this instance, if one can be constructed, or an empty Optional if one cannot be constructed.
    • Method Detail

      • describeConstable

        Optional<? extends ConstantDesc> describeConstable()
        Returns an Optional containing the nominal descriptor for this instance, if one can be constructed, or an empty Optional if one cannot be constructed.
        Returns:
        An Optional containing the resulting nominal descriptor, or an empty Optional if one cannot be constructed.