# 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