# Class ConstantPool

java.lang.Object
org.apache.bcel.classfile.ConstantPool

All Implemented Interfaces:
  `Cloneable, Iterable<Constant>, Node`

public class ConstantPool extends Object implements Cloneable, Node, Iterable<Constant>
This class represents the constant pool, that is, a table of constants, of a parsed classfile. It may contain null references, due to the JVM specification that skips an entry after an 8-byte constant (double, long) entry. Those interested in generating constant pools programmatically should see ConstantPoolGen.

See Also:
  - `Constant`
  - `ConstantPoolGen`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ConstantPool(DataInput input)`
  Reads constants from given input stream.
  `ConstantPool(Constant... constantPool)`
  Constructs a ConstantPool.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `accept(Visitor v)`
  Called by objects that are traversing the nodes of the tree implicitly defined by the contents of a Java class.
  `String`
  `constantToString(int index, byte tag)`
  Retrieves constant at 'index' from constant pool and resolve it to a string representation.
  `String`
  `constantToString(Constant c)`
  Resolves constant to a string representation.
  `ConstantPool`
  `copy()`
  Creates a deep copy of this constant pool.
  `void`
  `dump(DataOutputStream file)`
  Dumps constant pool to file stream in binary format.
  `<T extends Constant>
  T`
  `getConstant(int index)`
  Gets constant from constant pool.
  `<T extends Constant>
  T`
  `getConstant(int index, byte tag)`
  Gets constant from constant pool and check whether it has the expected type.
  `<T extends Constant>
  T`
  `getConstant(int index, byte tag, Class<T> castTo)`
  Gets constant from constant pool and check whether it has the expected type.
  `<T extends Constant>
  T`
  `getConstant(int index, Class<T> castTo)`
  Gets constant from constant pool.
  `ConstantInteger`
  `getConstantInteger(int index)`
  Gets constant from constant pool and check whether it has the expected type.
  `Constant[]`
  `getConstantPool()`
  Gets the array of constants.
  `String`
  `getConstantString(int index, byte tag)`
  Gets string from constant pool and bypass the indirection of 'ConstantClass' and 'ConstantString' objects.
  `ConstantUtf8`
  `getConstantUtf8(int index)`
  Gets constant from constant pool and check whether it has the expected type.
  `int`
  `getLength()`
  Gets the length of constant pool.
  `Iterator<Constant>`
  `iterator()`
  `void`
  `setConstant(int index, Constant constant)`
  Sets a constant at the specified index.
  `void`
  `setConstantPool(Constant[] constantPool)`
  Sets the constant pool.
  `String`
  `toString()`

  ### Methods inherited from class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

  ### Methods inherited from interface Iterable

  `forEach, spliterator`

- ## Constructor Details

  - ### ConstantPool

    public ConstantPool(Constant... constantPool)
    Constructs a ConstantPool.
    Parameters:
      `constantPool` - Array of constants.

  - ### ConstantPool

    public ConstantPool(DataInput input) throws IOException
    Reads constants from given input stream.
    Parameters:
      `input` - Input stream.
    Throws:
      `IOException` - if problem in readUnsignedShort or readConstant.

- ## Method Details

  - ### accept

    public void accept(Visitor v)
    Called by objects that are traversing the nodes of the tree implicitly defined by the contents of a Java class. I.e., the hierarchy of methods, fields, attributes, etc. spawns a tree of objects.
    Specified by:
      `accept` in interface `Node`
    Parameters:
      `v` - Visitor object.

  - ### constantToString

    public String constantToString(Constant c) throws IllegalArgumentException
    Resolves constant to a string representation.
    Parameters:
      `c` - Constant to be printed.
    Returns:
      String representation.
    Throws:
      `IllegalArgumentException` - if c is unknown constant type.

  - ### constantToString

    public String constantToString(int index, byte tag)
    Retrieves constant at 'index' from constant pool and resolve it to a string representation.
    Parameters:
      `index` - of constant in constant pool.
      `tag` - expected type.
    Returns:
      String representation.

  - ### copy

    public ConstantPool copy()
    Creates a deep copy of this constant pool.
    Returns:
      deep copy of this constant pool.

  - ### dump

    public void dump(DataOutputStream file) throws IOException
    Dumps constant pool to file stream in binary format.
    Parameters:
      `file` - Output file stream.
    Throws:
      `IOException` - if problem in writeShort or dump

  - ### getConstant

    public <T extends Constant> T getConstant(int index) throws ClassFormatException
    Gets constant from constant pool.
    Type Parameters:
      `T` - the type of the constant.
    Parameters:
      `index` - Index in constant pool.
    Returns:
      Constant value.
    Throws:
      `ClassFormatException` - if index is invalid.
    See Also:
      - `Constant`

  - ### getConstant

    public <T extends Constant> T getConstant(int index, byte tag) throws ClassFormatException
    Gets constant from constant pool and check whether it has the expected type.
    Type Parameters:
      `T` - the type of the constant.
    Parameters:
      `index` - Index in constant pool.
      `tag` - Tag of expected constant, that is, its type.
    Returns:
      Constant value.
    Throws:
      `ClassFormatException` - if constant type does not match tag.
    See Also:
      - `Constant`

  - ### getConstant

    public <T extends Constant> T getConstant(int index, byte tag, Class<T> castTo) throws ClassFormatException
    Gets constant from constant pool and check whether it has the expected type.
    Type Parameters:
      `T` - the type of the constant.
    Parameters:
      `index` - Index in constant pool.
      `tag` - Tag of expected constant, that is, its type.
      `castTo` - the class to cast to.
    Returns:
      Constant value.
    Throws:
      `ClassFormatException` - if constant type does not match tag.
    Since:
      6.6.0
    See Also:
      - `Constant`

  - ### getConstant

    public <T extends Constant> T getConstant(int index, Class<T> castTo) throws ClassFormatException
    Gets constant from constant pool.
    Type Parameters:
      `T` - A `Constant` subclass.
    Parameters:
      `index` - Index in constant pool.
      `castTo` - The `Constant` subclass to cast to.
    Returns:
      Constant value.
    Throws:
      `ClassFormatException` - if index is invalid.
    Since:
      6.6.0
    See Also:
      - `Constant`

  - ### getConstantInteger

    public ConstantInteger getConstantInteger(int index)
    Gets constant from constant pool and check whether it has the expected type.
    Parameters:
      `index` - Index in constant pool.
    Returns:
      ConstantInteger value.
    Throws:
      `ClassFormatException` - if constant type does not match tag.
    See Also:
      - `ConstantInteger`

  - ### getConstantPool

    public Constant[] getConstantPool()
    Gets the array of constants.
    Returns:
      Array of constants.
    See Also:
      - `Constant`

  - ### getConstantString

    public String getConstantString(int index, byte tag) throws IllegalArgumentException
    Gets string from constant pool and bypass the indirection of 'ConstantClass' and 'ConstantString' objects. I.e. these classes have an index field that points to another entry of the constant pool of type 'ConstantUtf8' which contains the real data.
    Parameters:
      `index` - Index in constant pool.
      `tag` - Tag of expected constant, either ConstantClass or ConstantString.
    Returns:
      Contents of string reference.
    Throws:
      `IllegalArgumentException` - if tag is invalid.
    See Also:
      - `ConstantClass`
      - `ConstantString`

  - ### getConstantUtf8

    public ConstantUtf8 getConstantUtf8(int index) throws ClassFormatException
    Gets constant from constant pool and check whether it has the expected type.
    Parameters:
      `index` - Index in constant pool.
    Returns:
      ConstantUtf8 value.
    Throws:
      `ClassFormatException` - if constant type does not match tag.
    See Also:
      - `ConstantUtf8`

  - ### getLength

    public int getLength()
    Gets the length of constant pool.
    Returns:
      Length of constant pool.

  - ### iterator

    public Iterator<Constant> iterator()
    Specified by:
      `iterator` in interface `Iterable<Constant>`

  - ### setConstant

    public void setConstant(int index, Constant constant)
    Sets a constant at the specified index.
    Parameters:
      `index` - the index in the constant pool.
      `constant` - Constant to set.

  - ### setConstantPool

    public void setConstantPool(Constant[] constantPool)
    Sets the constant pool.
    Parameters:
      `constantPool` - the constant pool array.

  - ### toString

    public String toString()
    Overrides:
      `toString` in class `Object`
    Returns:
      String representation.