# Interface ClassEntry

All Superinterfaces:
  `LoadableConstantEntry, PoolEntry`

public sealed interface ClassEntry extends LoadableConstantEntry
Models a `CONSTANT_Class_info` structure, representing a reference type, in the constant pool of a `class` file.

The use of a `ClassEntry` is modeled by a `ClassDesc` that is not primitive. Conversions are through `ConstantPoolBuilder.classEntry(ClassDesc)` and `asSymbol()`.

A `ClassEntry` is composite:

    ClassEntry(Utf8Entry name)

where `name` represents:

- The internal form of a binary name (JVMS 4.2.1), if and only if this `ClassEntry` represents a class or interface, such as `java/lang/String` for the `String` class.
- A field descriptor string (JVMS 4.3.2) representing an array type, if and only if this `ClassEntry` represents an array type, such as `[I` for the `int[]` type, or `[Ljava/lang/String;` for the `String[]` type.

A field descriptor string for an array type can be distinguished by its leading `'['` character.

API Note:
  The internal form of a binary name, where all occurrences of `.` in the name are replaced by `/`, is informally known as an internal name. This concept also applies to package names in addition to class and interface names.
See Java Virtual Machine Specification:
  4.4.1 The `CONSTANT_Class_info` Structure
Since:
  24
See Also:
  - `ConstantPoolBuilder::classEntry`
  - `ClassDesc`

- ## 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`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `String`
  `asInternalName()`
  Returns the represented reference type, as the internal form of a binary name or an array descriptor string.
  `ClassDesc`
  `asSymbol()`
  Returns the represented reference type, as a symbolic descriptor.
  `default ConstantDesc`
  `constantValue()`
  Returns a symbolic descriptor of this constant.
  `boolean`
  `matches(ClassDesc desc)`
  Returns whether this entry describes the given reference type.
  `Utf8Entry`
  `name()`
  Returns the `Utf8Entry` referred by this structure.

  ### Methods declared in interface LoadableConstantEntry

  `typeKind`

  ### Methods declared in interface PoolEntry

  `constantPool, index, tag, width`

- ## Method Details

  - ### constantValue

    default ConstantDesc constantValue()
    Returns a symbolic descriptor of this constant.

    This is equivalent to `asSymbol()`.

    Specified by:
      `constantValue` in interface `LoadableConstantEntry`
    Returns:
      a symbolic descriptor of this constant
    See Also:
      - `ConstantPoolBuilder.loadableConstantEntry(ConstantDesc)`

  - ### name

    Utf8Entry name()
    Returns the `Utf8Entry` referred by this structure. If the value of the UTF8 starts with a `[`, this represents an array type and the value is a descriptor string; otherwise, this represents a class or interface and the value is the internal form of a binary name.
    Returns:
      the `Utf8Entry` referred by this structure
    See Also:
      - `ConstantPoolBuilder::classEntry(Utf8Entry)`

  - ### asInternalName

    String asInternalName()
    Returns the represented reference type, as the internal form of a binary name or an array descriptor string. This is a shortcut for `name().stringValue()`.
    Returns:
      the represented reference type, as the internal form of a binary name or an array descriptor string

  - ### asSymbol

    ClassDesc asSymbol()
    Returns the represented reference type, as a symbolic descriptor. The returned descriptor is never primitive.
    API Note:
      If only symbol equivalence is desired, `matches` should be used. It requires reduced parsing and can improve `class` file reading performance.
    Returns:
      the represented reference type, as a symbolic descriptor
    See Also:
      - `ConstantPoolBuilder::classEntry(ClassDesc)`

  - ### matches

    boolean matches(ClassDesc desc)
    Returns whether this entry describes the given reference type. Returns `false` if `desc` is primitive.
    Parameters:
      `desc` - the reference type
    Returns:
      whether this entry describes the given reference type
    Since:
      25