# Interface DynamicConstantPoolEntry

All Superinterfaces:
  `PoolEntry`

All Known Subinterfaces:
  `ConstantDynamicEntry, InvokeDynamicEntry`

public sealed interface DynamicConstantPoolEntry extends PoolEntry permits ConstantDynamicEntry, InvokeDynamicEntry
Superinterface modeling dynamically-computed constant pool entries, which include `ConstantDynamicEntry` and `InvokeDynamicEntry`, in the constant pool of a `class` file.

Different types of dynamically-computed constant pool entries bear structural similarities, but they appear in distinct locations. As a result, their uses are represented by different symbolic descriptors, specific to each subtype.

A dynamic constant entry is composite:

    DynamicConstantPoolEntry(
        BootstrapMethodEntry bootstrap,
        NameAndTypeEntry nameAndType
    )

See Java Virtual Machine Specification:
  4.4.10 The `CONSTANT_Dynamic_info` and `CONSTANT_InvokeDynamic_info` Structures
  5.4.3.6 Dynamically-Computed Constant and Call Site Resolution
Sealed Class Hierarchy Graph:
Since:
  24
See Also:
  - Dynamic resolution of call sites and constants

- ## Field Summary

  ### Fields declared in interface PoolEntry

  `TAG_CLASS, TAG_DOUBLE, TAG_DYNAMIC, TAG_FIELDREF, TAG_FLOAT, TAG_INTEGER, TAG_INTERFACE_METHODREF, TAG_INVOKE_DYNAMIC, TAG_LONG, TAG_METHOD_HANDLE, TAG_METHOD_TYPE, TAG_METHODREF, TAG_MODULE, TAG_NAME_AND_TYPE, TAG_PACKAGE, TAG_STRING, TAG_UTF8`
  Modifier and Type
  Field
  Description
  `static final int`
  `TAG_CLASS`
  The tag for `CONSTANT_Class` constant kind.
  `static final int`
  `TAG_DOUBLE`
  The tag for `CONSTANT_Double` constant kind.
  `static final int`
  `TAG_DYNAMIC`
  The tag for `CONSTANT_Dynamic` constant kind.
  `static final int`
  `TAG_FIELDREF`
  The tag for `CONSTANT_Fieldref` constant kind.
  `static final int`
  `TAG_FLOAT`
  The tag for `CONSTANT_Float` constant kind.
  `static final int`
  `TAG_INTEGER`
  The tag for `CONSTANT_Integer` constant kind.
  `static final int`
  `TAG_INTERFACE_METHODREF`
  The tag for `CONSTANT_InterfaceMethodref` constant kind.
  `static final int`
  `TAG_INVOKE_DYNAMIC`
  The tag for `CONSTANT_InvokeDynamic` constant kind.
  `static final int`
  `TAG_LONG`
  The tag for `CONSTANT_Long` constant kind.
  `static final int`
  `TAG_METHOD_HANDLE`
  The tag for `CONSTANT_MethodHandle` constant kind.
  `static final int`
  `TAG_METHOD_TYPE`
  The tag for `CONSTANT_MethodType` constant kind.
  `static final int`
  `TAG_METHODREF`
  The tag for `CONSTANT_Methodref` constant kind.
  `static final int`
  `TAG_MODULE`
  The tag for `CONSTANT_Module` constant kind.
  `static final int`
  `TAG_NAME_AND_TYPE`
  The tag for `CONSTANT_NameAndType` constant kind.
  `static final int`
  `TAG_PACKAGE`
  The tag for `CONSTANT_Package` constant kind.
  `static final int`
  `TAG_STRING`
  The tag for `CONSTANT_String` constant kind.
  `static final int`
  `TAG_UTF8`
  The tag for `CONSTANT_Utf8` constant kind.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `BootstrapMethodEntry`
  `bootstrap()`
  Returns the entry in the bootstrap method table for this constant.
  `int`
  `bootstrapMethodIndex()`
  Returns index of the entry in the bootstrap method table for this constant.
  `default Utf8Entry`
  `name()`
  Returns the name indicated by this symbolic reference.
  `NameAndTypeEntry`
  `nameAndType()`
  Returns the name and the descriptor string indicated by this symbolic reference.
  `default Utf8Entry`
  `type()`
  Returns the descriptor string indicated by this symbolic reference.

  ### Methods declared in interface PoolEntry

  `constantPool, index, tag, width`
  Modifier and Type
  Method
  Description
  `ConstantPool`
  `constantPool()`
  Returns the constant pool this entry is from.
  `int`
  `index()`
  Returns the index within the constant pool corresponding to this entry.
  `int`
  `tag()`
  Returns the constant pool tag that describes the type of this entry.
  `int`
  `width()`
  Returns the number of constant pool slots this entry consumes.

- ## Method Details

  - ### bootstrap

    BootstrapMethodEntry bootstrap()
    Returns the entry in the bootstrap method table for this constant.
    Returns:
      the entry in the bootstrap method table for this constant
    See Also:
      - Execution of bootstrap methods
      - `ConstantPoolBuilder::constantDynamicEntry(BootstrapMethodEntry, NameAndTypeEntry)`
      - `ConstantPoolBuilder::invokeDynamicEntry(BootstrapMethodEntry, NameAndTypeEntry)`

  - ### bootstrapMethodIndex

    int bootstrapMethodIndex()
    Returns index of the entry in the bootstrap method table for this constant. The return value is equivalent to `bootstrap().bsmIndex()`.
    Returns:
      index of the entry in the bootstrap method table for this constant

  - ### nameAndType

    NameAndTypeEntry nameAndType()
    Returns the name and the descriptor string indicated by this symbolic reference.
    Returns:
      the name and the descriptor string indicated by this symbolic reference
    See Also:
      - Execution of bootstrap methods
      - `ConstantPoolBuilder::constantDynamicEntry(BootstrapMethodEntry, NameAndTypeEntry)`
      - `ConstantPoolBuilder::invokeDynamicEntry(BootstrapMethodEntry, NameAndTypeEntry)`

  - ### name

    default Utf8Entry name()
    Returns the name indicated by this symbolic reference.
    Returns:
      the name indicated by this symbolic reference

  - ### type

    default Utf8Entry type()
    Returns the descriptor string indicated by this symbolic reference. This is a field descriptor string if this entry is a `ConstantDynamicEntry`, or a method descriptor string if this entry is a `InvokeDynamicEntry`.
    API Note:
      Each subinterface has its specific accessor named `typeSymbol` for the symbolic descriptor derived from this descriptor string.
    Returns:
      the descriptor string indicated by this symbolic reference