# Interface Signature.ClassTypeSig

All Superinterfaces:
  `Signature, Signature.RefTypeSig, Signature.ThrowableSig`

Enclosing interface:
  `Signature`

public static sealed interface Signature.ClassTypeSig extends Signature.RefTypeSig, Signature.ThrowableSig
Models the signature of a possibly-parameterized class or interface type.

These are examples of class type signatures:

- `Lcom/example/Outer;` for `Outer`
  Has class name `com/example/Outer` and no outer type or type argument.
- `Lcom/example/Outer$Nested<TA;>;` for `Outer.Nested<A>`
  Has class name `com/example/Outer$Nested` representing a nested class, no outer type, and a single type argument of type variable `A`.
- `Lcom/example/GenericOuter<TA;>.Inner;` for `GenericOuter<A>.Inner`
  Has class name `Inner`, a simple class name, outer type `Lcom/example/GenericOuter<TA;>;` for `GenericOuter<A>`, and no type argument.

If the outer type exists, the class name is the simple name of the nested type. Otherwise, it is a binary name in internal form (separated by `/`).

If a nested type does not have any enclosing parameterization, it may be represented without an outer type and as an internal binary name, in which nesting is represented by `$` instead of `.`.

See Java Virtual Machine Specification:
  4.7.9.1 Signatures
Since:
  24
See Also:
  - `Type`
  - `ParameterizedType`

- ## Nested Class Summary

  ### Nested classes/interfaces declared in interface Signature

  `Signature.ArrayTypeSig, Signature.BaseTypeSig, Signature.ClassTypeSig, Signature.RefTypeSig, Signature.ThrowableSig, Signature.TypeArg, Signature.TypeParam, Signature.TypeVarSig`
  Modifier and Type
  Interface
  Description
  `static interface`
  `Signature.ArrayTypeSig`
  Models the signature of an array type.
  `static interface`
  `Signature.BaseTypeSig`
  Models the signature of a primitive type (JLS 4.2) or void.
  `static interface`
  `Signature.ClassTypeSig`
  Models the signature of a possibly-parameterized class or interface type.
  `static interface`
  `Signature.RefTypeSig`
  Models the signature of a reference type, which may be a class, interface, type variable, or array type.
  `static interface`
  `Signature.ThrowableSig`
  Marker interface for a signature for a throwable type.
  `static interface`
  `Signature.TypeArg`
  Models a type argument, an argument to a type parameter.
  `static interface`
  `Signature.TypeParam`
  Models a signature for a type parameter of a generic class, interface, method, or constructor, which introduces a type variable.
  `static interface`
  `Signature.TypeVarSig`
  Models the signature of a type variable.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `default ClassDesc`
  `classDesc()`
  Returns this class or interface, as a symbolic descriptor.
  `String`
  `className()`
  Returns the class or interface name; includes the slash-separated package name if there is no outer type.
  `static Signature.ClassTypeSig`
  `of(Signature.ClassTypeSig outerType, ClassDesc className, Signature.TypeArg... typeArgs)`
  Deprecated, for removal: This API element is subject to removal in a future version.
  The resulting signature does not denote the class represented by `className` when `outerType` is not null.
  `static Signature.ClassTypeSig`
  `of(Signature.ClassTypeSig outerType, String className, Signature.TypeArg... typeArgs)`
  Returns a class type signature.
  `static Signature.ClassTypeSig`
  `of(ClassDesc className, Signature.TypeArg... typeArgs)`
  Returns a class or interface signature without an outer type.
  `static Signature.ClassTypeSig`
  `of(String className, Signature.TypeArg... typeArgs)`
  Returns a class or interface signature without an outer type.
  `Optional<Signature.ClassTypeSig>`
  `outerType()`
  Returns the signature of the class that this class is a member of, only if this is a member class.
  `List<Signature.TypeArg>`
  `typeArgs()`
  Returns the type arguments of this class or interface.

  ### Methods declared in interface Signature

  `signatureString`
  Modifier and Type
  Method
  Description
  `String`
  `signatureString()`
  Returns the raw signature string.

- ## Method Details

  - ### outerType

    Optional<Signature.ClassTypeSig> outerType()
    Returns the signature of the class that this class is a member of, only if this is a member class. Note that the outer class may be absent if this is a member class without any parameterized enclosing type.
    Returns:
      the signature of the class that this class is a member of, only if this is a member class
    See Java Language Specification:
      4.5 Parameterized Types

  - ### className

    String className()
    Returns the class or interface name; includes the slash-separated package name if there is no outer type. Note this may indicate a nested class name with `$` separators if there is no parameterized enclosing type.
    Returns:
      the class or interface name; includes the slash-separated package name if there is no outer type

  - ### classDesc

    default ClassDesc classDesc()
    Returns this class or interface, as a symbolic descriptor.
    Returns:
      this class or interface, as a symbolic descriptor

  - ### typeArgs

    List<Signature.TypeArg> typeArgs()
    Returns the type arguments of this class or interface. Note that the outer type may have more type arguments.
    Returns:
      the type arguments of this class or interface
    See Java Language Specification:
      4.5 Parameterized Types

  - ### of

    static Signature.ClassTypeSig of(ClassDesc className, Signature.TypeArg... typeArgs)
    Returns a class or interface signature without an outer type.
    Parameters:
      `className` - the name of the class or interface
      `typeArgs` - the type arguments
    Returns:
      a class or interface signature without an outer type
    Throws:
      `IllegalArgumentException` - if `className` does not represent a class or interface, or if it cannot be denoted

  - ### of

    @Deprecated(since="26", forRemoval=true) static Signature.ClassTypeSig of(Signature.ClassTypeSig outerType, ClassDesc className, Signature.TypeArg... typeArgs)
    Deprecated, for removal: This API element is subject to removal in a future version.
    The resulting signature does not denote the class represented by `className` when `outerType` is not null. Use `of(ClassTypeSig, String, TypeArg...)` instead.
    Returns a class or interface signature.
    Parameters:
      `outerType` - signature of the outer type, may be `null`
      `className` - the name of this class or interface
      `typeArgs` - the type arguments
    Returns:
      a class or interface signature
    Throws:
      `IllegalArgumentException` - if `className` does not represent a class or interface, or if it cannot be denoted

  - ### of

    static Signature.ClassTypeSig of(String className, Signature.TypeArg... typeArgs)
    Returns a class or interface signature without an outer type.
    Parameters:
      `className` - the name of the class or interface, may use `/` to separate
      `typeArgs` - the type arguments
    Returns:
      a class or interface signature without an outer type
    Throws:
      `IllegalArgumentException` - if `className` cannot be denoted

  - ### of

    static Signature.ClassTypeSig of(Signature.ClassTypeSig outerType, String className, Signature.TypeArg... typeArgs)
    Returns a class type signature.
    Parameters:
      `outerType` - signature of the outer type, may be `null`
      `className` - the name of this class or interface, may use `/` to separate if outer type is absent
      `typeArgs` - the type arguments
    Returns:
      a class type signature
    Throws:
      `IllegalArgumentException` - if `className` cannot be denoted