# Interface ClassModel

All Superinterfaces:
  `AttributedElement`, `ClassFileElement`, `CompoundElement<ClassElement>`, `Iterable<ClassElement>`

public sealed interface ClassModel extends CompoundElement<ClassElement>, AttributedElement
Models a `class` file. A `class` file can be viewed as a composition of `ClassElement`s, or by random access via accessor methods if only specific parts of the `class` file is needed.

Use `ClassFile.parse(byte[])`, which parses the binary data of a `class` file into a model, to obtain a `ClassModel`.

To construct a `class` file, use `ClassFile.build(ClassDesc, Consumer)`. `ClassFile.transformClass(ClassModel, ClassTransform)` allows creating a new class by selectively processing the original class elements and directing the results to a class builder.

A class holds attributes, most of which are accessible as member elements. `BootstrapMethodsAttribute` can only be accessed via explicit attribute reading, as it is modeled as part of the constant pool.

See Java Virtual Machine Specification:
  4.1 The `ClassFile` Structure
Since:
  24
See Also:
  - `ClassFile.parse(byte[])`
  - `ClassTransform`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `ConstantPool`
  `constantPool()`
  Returns the constant pool for this class.
  `List<FieldModel>`
  `fields()`
  Returns the fields of this class.
  `AccessFlags`
  `flags()`
  Returns the access flags.
  `List<ClassEntry>`
  `interfaces()`
  Returns the interfaces implemented by this class.
  `boolean`
  `isModuleInfo()`
  Returns whether this `class` file is a module descriptor.
  `int`
  `majorVersion()`
  Returns the major version of this class.
  `List<MethodModel>`
  `methods()`
  Returns the methods of this class.
  `int`
  `minorVersion()`
  Returns the minor version of this class.
  `Optional<ClassEntry>`
  `superclass()`
  Returns the superclass of this class, if there is one.
  `ClassEntry`
  `thisClass()`
  Returns the constant pool entry describing the name of this class.

  ### Methods declared in interface java.lang.classfile.AttributedElement

  `attributes, findAttribute, findAttributes`

  ### Methods declared in interface java.lang.classfile.CompoundElement

  `elementList, elementStream, forEach, iterator, toDebugString`

  ### Methods declared in interface java.lang.Iterable

  `spliterator`

- ## Method Details

  - ### constantPool

    ConstantPool constantPool()
    Returns the constant pool for this class.
    Returns:
      the constant pool for this class
    See Also:
      - `ConstantPoolBuilder.of(ClassModel)`

  - ### flags

    AccessFlags flags()
    Returns the access flags.
    Returns:
      the access flags
    See Also:
      - `AccessFlag.Location.CLASS`

  - ### thisClass

    ClassEntry thisClass()
    Returns the constant pool entry describing the name of this class.
    Returns:
      the constant pool entry describing the name of this class

  - ### majorVersion

    int majorVersion()
    Returns the major version of this class. It is in the range of unsigned short, `[0, 65535]`.
    Returns:
      the major version of this class
    See Also:
      - `ClassFileVersion`

  - ### minorVersion

    int minorVersion()
    Returns the minor version of this class. It is in the range of unsigned short, `[0, 65535]`.
    Returns:
      the minor version of this class
    See Also:
      - `ClassFileVersion`

  - ### fields

    List<FieldModel> fields()
    Returns the fields of this class.
    Returns:
      the fields of this class

  - ### methods

    List<MethodModel> methods()
    Returns the methods of this class.
    Returns:
      the methods of this class

  - ### superclass

    Optional<ClassEntry> superclass()
    Returns the superclass of this class, if there is one. This `class` file may have no superclass if this represents a module descriptor or the `Object` class; otherwise, it must have a superclass. If this is an interface, the superclass must be `Object`.
    Returns:
      the superclass of this class, if there is one
    See Also:
      - `Superclass`

  - ### interfaces

    List<ClassEntry> interfaces()
    Returns the interfaces implemented by this class.
    Returns:
      the interfaces implemented by this class
    See Also:
      - `Interfaces`

  - ### isModuleInfo

    boolean isModuleInfo()
    Returns whether this `class` file is a module descriptor.
    Returns:
      whether this `class` file is a module descriptor
    See Also:
      - `ClassFile.buildModule(ModuleAttribute, Consumer)`