# Interface PoolEntry

All Known Subinterfaces:
  `AnnotationConstantValueEntry, ClassEntry, ConstantDynamicEntry, ConstantValueEntry, DoubleEntry, DynamicConstantPoolEntry, FieldRefEntry, FloatEntry, IntegerEntry, InterfaceMethodRefEntry, InvokeDynamicEntry, LoadableConstantEntry, LongEntry, MemberRefEntry, MethodHandleEntry, MethodRefEntry, MethodTypeEntry, ModuleEntry, NameAndTypeEntry, PackageEntry, StringEntry, Utf8Entry`

public sealed interface PoolEntry permits AnnotationConstantValueEntry, DynamicConstantPoolEntry, LoadableConstantEntry, MemberRefEntry, ModuleEntry, NameAndTypeEntry, PackageEntry
Models an entry in the constant pool of a `class` file. Entries are read from `class` files, and can be created with a `ConstantPoolBuilder` to write to `class` files.

Implementation Note:

  ## Unbound Constant Pool Entries

  Implementations may create unbound constant pool entries not belonging to an actual constant pool. They conveniently represent constant pool entries referred by unbound attributes not read from a `class` file. Their `index()` return a non-positive invalid value, and behaviors of their `constantPool()` are unspecified. They are considered alien to any contextual constant pool and will be converted when they are written to `class` files.
Sealed Class Hierarchy Graph:
Since:
  24
See Also:
  - Alien Constant Pool Entries

- ## Field Summary

  Fields
  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
  `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.

- ## Field Details

  - ### TAG_CLASS

    static final int TAG_CLASS
    The tag for `CONSTANT_Class` constant kind.
    See Also:
      - Constant Field Values

  - ### TAG_DOUBLE

    static final int TAG_DOUBLE
    The tag for `CONSTANT_Double` constant kind.
    See Also:
      - Constant Field Values

  - ### TAG_DYNAMIC

    static final int TAG_DYNAMIC
    The tag for `CONSTANT_Dynamic` constant kind.
    See Also:
      - Constant Field Values

  - ### TAG_FIELDREF

    static final int TAG_FIELDREF
    The tag for `CONSTANT_Fieldref` constant kind.
    See Also:
      - Constant Field Values

  - ### TAG_FLOAT

    static final int TAG_FLOAT
    The tag for `CONSTANT_Float` constant kind.
    See Also:
      - Constant Field Values

  - ### TAG_INTEGER

    static final int TAG_INTEGER
    The tag for `CONSTANT_Integer` constant kind.
    See Also:
      - Constant Field Values

  - ### TAG_INTERFACE_METHODREF

    static final int TAG_INTERFACE_METHODREF
    The tag for `CONSTANT_InterfaceMethodref` constant kind.
    See Also:
      - Constant Field Values

  - ### TAG_INVOKE_DYNAMIC

    static final int TAG_INVOKE_DYNAMIC
    The tag for `CONSTANT_InvokeDynamic` constant kind.
    See Also:
      - Constant Field Values

  - ### TAG_LONG

    static final int TAG_LONG
    The tag for `CONSTANT_Long` constant kind.
    See Also:
      - Constant Field Values

  - ### TAG_METHOD_HANDLE

    static final int TAG_METHOD_HANDLE
    The tag for `CONSTANT_MethodHandle` constant kind.
    See Also:
      - Constant Field Values

  - ### TAG_METHODREF

    static final int TAG_METHODREF
    The tag for `CONSTANT_Methodref` constant kind.
    See Also:
      - Constant Field Values

  - ### TAG_METHOD_TYPE

    static final int TAG_METHOD_TYPE
    The tag for `CONSTANT_MethodType` constant kind.
    See Also:
      - Constant Field Values

  - ### TAG_MODULE

    static final int TAG_MODULE
    The tag for `CONSTANT_Module` constant kind.
    See Also:
      - Constant Field Values

  - ### TAG_NAME_AND_TYPE

    static final int TAG_NAME_AND_TYPE
    The tag for `CONSTANT_NameAndType` constant kind.
    See Also:
      - Constant Field Values

  - ### TAG_PACKAGE

    static final int TAG_PACKAGE
    The tag for `CONSTANT_Package` constant kind.
    See Also:
      - Constant Field Values

  - ### TAG_STRING

    static final int TAG_STRING
    The tag for `CONSTANT_String` constant kind.
    See Also:
      - Constant Field Values

  - ### TAG_UTF8

    static final int TAG_UTF8
    The tag for `CONSTANT_Utf8` constant kind.
    See Also:
      - Constant Field Values

- ## Method Details

  - ### constantPool

    ConstantPool constantPool()
    Returns the constant pool this entry is from.
    API Note:
      Given a `ConstantPoolBuilder` `builder` and a `PoolEntry entry`, use `builder.canWriteDirect(entry.constantPool())` instead of object equality of the constant pool to determine if an entry belongs to the builder.
    Returns:
      the constant pool this entry is from
    See Also:
      - Unbound Constant Pool Entries

  - ### tag

    int tag()
    Returns the constant pool tag that describes the type of this entry.
    API Note:
      `TAG_`-prefixed constants in this class, such as `TAG_UTF8`, describe the possible return values of this method.
    Returns:
      the constant pool tag that describes the type of this entry

  - ### index

    int index()
    Returns the index within the constant pool corresponding to this entry. A valid index is always positive; if the index is non-positive, this entry is unbound.
    Returns:
      the index within the constant pool corresponding to this entry
    See Also:
      - Unbound Constant Pool Entries

  - ### width

    int width()
    Returns the number of constant pool slots this entry consumes.

    All pool entries except `CONSTANT_Long` and `CONSTANT_Double` have width `1`. These two exceptions have width `2`, and their subsequent indices at `index() + 1` are considered unusable.

    API Note:
      If this entry is loadable, the width of this entry does not decide if this entry should be loaded with `ldc` or `ldc2_w`. For example, `ConstantDynamicEntry` always has width `1`, but it must be loaded with `ldc2_w` if its type is `long` or `double`. Use `typeKind().slotSize()` to determine the loading instruction instead.
    Returns:
      the number of constant pool slots this entry consumes
    See Also:
      - Index in the Constant Pool