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

  `attributes, findAttribute, findAttributes`
  Modifier and Type
  Method
  Description
  `List<Attribute<?>>`
  `attributes()`
  Returns the attributes of this structure.
  `default <T extends Attribute<T>>
  Optional<T>`
  `findAttribute(AttributeMapper<T> attr)`
  Finds an attribute by name.
  `default <T extends Attribute<T>>
  List<T>`
  `findAttributes(AttributeMapper<T> attr)`
  Finds attributes by name.

  ### Methods declared in interface CompoundElement

  `elementList, elementStream, forEach, iterator, toDebugString`
  Modifier and Type
  Method
  Description
  `default List<ClassElement>`
  `elementList()`
  Returns a `List` containing all member elements in this compound element.
  `default Stream<ClassElement>`
  `elementStream()`
  Returns a `Stream` containing all member elements in this compound element.
  `void`
  `forEach(Consumer<? super ClassElement> consumer)`
  Invokes the provided handler with each member element in this compound element.
  `default Iterator<ClassElement>`
  `iterator()`
  Returns an `Iterator` describing all member elements in this compound element.
  `default String`
  `toDebugString()`
  Returns a text representation of the compound element and its contents for debugging purposes.

  ### Methods declared in interface Iterable

  `spliterator`
  Modifier and Type
  Method
  Description
  `default Spliterator<ClassElement>`
  `spliterator()`
  Creates a `Spliterator` over the elements described by this `Iterable`.

- ## 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 a `u2` value.
    Returns:
      the major version of this class
    See Also:
      - `ClassFileVersion`

  - ### minorVersion

    int minorVersion()
    Returns the minor version of this class. It is a `u2` value.
    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)`