# 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 java.lang.classfile.constantpool.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.
`Utf8Entry`
`name()`
Returns the `Utf8Entry` referred by this structure.

### Methods declared in interface java.lang.classfile.constantpool.LoadableConstantEntry

`typeKind`

### Methods declared in interface java.lang.classfile.constantpool.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.

Returns:
  the represented reference type, as a symbolic descriptor
See Also:
  - `ConstantPoolBuilder::classEntry(ClassDesc)`