Model of a class or interface that you can inspect.

The models of classes and interfaces are also closed types.

no type hierarchy

- `ClassOrInterface`
  - `Generic`
  - `Model`
    - `Declared`
  - `ClosedType`

- `ClassOrInterface` of
  - `ClassModel`
    - `Class`
    - `MemberClass`
  - `InterfaceModel`
    - `Interface`
    - `MemberInterface`

Attributes
`caseValues` | Source Code `shared formal Type[] caseValues` The list of case values for this type. This omits any case type to only contain case values. Since 1.1.0
`declaration` | Source Code `shared formal ClassOrInterfaceDeclaration declaration` The declaration for this class or interface. Refines `Model.declaration` ultimately refines `Declared.declaration`
`extendedType` | Source Code `shared formal ClassModel<Anything,Nothing>? extendedType` The extended closed type for this class or interface. Note that the Anything type has no extended type since it is the top of the type hierarchy.
`satisfiedTypes` | Source Code `shared formal InterfaceModel<Anything>[] satisfiedTypes` The list of closed types that this class or interface satisfies.

Inherited Attributes
Attributes inherited from: `Object` `hash`, `string`
Attributes inherited from: `Declared` `container`, `declaration`
Attributes inherited from: `Generic` `typeArgumentList`, `typeArgumentWithVarianceList`, `typeArgumentWithVariances`, `typeArguments`
Attributes inherited from: `Model` `container`, `declaration`

Methods
`getAttribute` | Source Code `shared formal Attribute<Container,Get,Set>? getAttribute<Container = Nothing, Get = Anything, Set = Nothing>(String name)` Gets an attribute by name. Returns `null` if not found. See `getClassOrInterface()` for how the `Container` type parameter works. Throws `IncompatibleTypeException` If the specified `Get` or `Set` type arguments are not compatible with the actual result.
`getAttributes` | Source Code `shared formal Attribute<Container,Get,Set>[] getAttributes<Container = Nothing, Get = Anything, Set = Nothing>(ClosedType<Annotation>[] annotationTypes)` Gets a list of attributes matching the given container and attribute type, annotated with all the specified annotations, which are declared on this type or inherited. Since 1.1.0
`getClass` | Source Code `shared formal MemberClass<Container,Type,Arguments>? getClass<Container = Nothing, Type = Anything, Arguments = Nothing>(String name, ClosedType<Anything>[] types) given Arguments satisfies Anything[]` Gets a member class by name. Returns `null` if not found. See `getClassOrInterface()` for how the `Container` type parameter works. Throws `IncompatibleTypeException` If the specified `Type` or `Arguments` type arguments are not compatible with the actual result, or if the corresponding member is not a `MemberClass`. `TypeApplicationException` If the specified closed type argument values are not compatible with the actual result's type parameters.
`getClassOrInterface` | Source Code `shared formal Member<Container,Kind>? getClassOrInterface<Container = Nothing, Kind = ClassOrInterface<Anything>>(String name, ClosedType<Anything>[] types) given Kind satisfies ClassOrInterface<Anything>` Gets a member class or interface by name. Returns `null` if not found. The `Container` type parameter acts as a selector for the container of the member: If it is the current type or a subtype, and the attribute exists in this type, then the attribute of the current type is returned. For example, looking up 'unit' in `Integer` with `Integer` as `Container` will return `Integer.unit`. If it is a supertype of this type, and that supertype defines this attribyte, then that supertype's attribute is returned. For example, looking up 'hash' in `Integer` with `Object` as `Container` will return `Object.hash`. If it is a type that is disjoint from this type, the attribute will be looked up in the common supertype between that type and this type. For example, looking up 'hash' in `Integer` with `String` as `Container` will return `Object.hash`. If the common supertype between this type and the `Container` type has no such member, `null` is returned. Throws `IncompatibleTypeException` If the specified `Kind` type argument is not compatible with the actual result. `TypeApplicationException` If the specified closed type argument values are not compatible with the actual result's type parameters.
`getClasses` | Source Code `shared formal MemberClass<Container,Type,Arguments>[] getClasses<Container = Nothing, Type = Anything, Arguments = Nothing>(ClosedType<Annotation>[] annotationTypes) given Arguments satisfies Anything[]` Returns the list of shared member classes on this class or interface and annotated with all the specified annotations. This includes inherited member classes but not unshared member classes. Since 1.1.0
`getDeclaredAttribute` | Source Code `shared formal Attribute<Container,Get,Set>? getDeclaredAttribute<Container = Nothing, Get = Anything, Set = Nothing>(String name)` Gets an attribute by name. Returns `null` if not found. See `getDeclaredClassOrInterface()` for how the `Container` type parameter works. Throws `IncompatibleTypeException` If the specified `Container`, `Get` or `Set` type arguments are not compatible with the actual result.
`getDeclaredAttributes` | Source Code `shared formal Attribute<Container,Get,Set>[] getDeclaredAttributes<Container = Nothing, Get = Anything, Set = Nothing>(ClosedType<Annotation>[] annotationTypes)` Gets a list of attributes matching the given container and attribute type, annotated with all the specified annotations, which are directly declared on this type. Since 1.1.0
`getDeclaredClass` | Source Code `shared formal MemberClass<Container,Type,Arguments>? getDeclaredClass<Container = Nothing, Type = Anything, Arguments = Nothing>(String name, ClosedType<Anything>[] types) given Arguments satisfies Anything[]` Gets a member class by name. Returns `null` if not found. See `getDeclaredClassOrInterface()` for how the `Container` type parameter works. Throws `IncompatibleTypeException` If the specified `Container`, `Type` or `Arguments` type arguments are not compatible with the actual result, or if the corresponding member is not a `MemberClass`. `TypeApplicationException` If the specified closed type argument values are not compatible with the actual result's type parameters.
`getDeclaredClassOrInterface` | Source Code `shared formal Member<Container,Kind>? getDeclaredClassOrInterface<Container = Nothing, Kind = ClassOrInterface<Anything>>(String name, ClosedType<Anything>[] types) given Kind satisfies ClassOrInterface<Anything>` Gets a member class or interface by name. Returns `null` if not found. The `Container` type parameter acts as a selector for the container of the member: If it is the current type or a subtype, and the attribute exists in this type, then the attribute of the current type is returned. For example, looking up 'unit' in `Integer` with `Integer` as `Container` will return `Integer.unit`. If it is a supertype of this type, or a type that is disjoint from this type, an `IncompatibleTypeException` will be thrown. If this type has no such member, `null` is returned. Throws `IncompatibleTypeException` If the specified `Container` or `Kind` type arguments are not compatible with the actual result. `TypeApplicationException` If the specified closed type argument values are not compatible with the actual result's type parameters.
`getDeclaredClasses` | Source Code `shared formal MemberClass<Container,Type,Arguments>[] getDeclaredClasses<Container = Nothing, Type = Anything, Arguments = Nothing>(ClosedType<Annotation>[] annotationTypes) given Arguments satisfies Anything[]` Gets a list of member classes matching the given container, return and parameter types, annotated with all the specified annotations, which are directly declared on this type. Since 1.1.0
`getDeclaredInterface` | Source Code `shared formal MemberInterface<Container,Type>? getDeclaredInterface<Container = Nothing, Type = Anything>(String name, ClosedType<Anything>[] types)` Gets a member interface by name. Returns `null` if not found. See `getDeclaredClassOrInterface()` for how the `Container` type parameter works. Throws `IncompatibleTypeException` If the specified `Container` or `Type` type arguments are not compatible with the actual result, or if the corresponding member is not a `MemberInterface`. `TypeApplicationException` If the specified closed type argument values are not compatible with the actual result's type parameters.
`getDeclaredInterfaces` | Source Code `shared formal MemberInterface<Container,Type>[] getDeclaredInterfaces<Container = Nothing, Type = Anything>(ClosedType<Annotation>[] annotationTypes)` Returns the list of member interfaces directly declared on this class or interface and annotated with all the specified annotations. This includes unshared member interfaces but not inherited member interfaces. Since 1.1.0
`getDeclaredMethod` | Source Code `shared formal Method<Container,Type,Arguments>? getDeclaredMethod<Container = Nothing, Type = Anything, Arguments = Nothing>(String name, ClosedType<Anything>[] types) given Arguments satisfies Anything[]` Gets a method by name. Returns `null` if not found. See `getDeclaredClassOrInterface()` for how the `Container` type parameter works. Throws `IncompatibleTypeException` If the specified `Container`, `Type` or `Arguments` type arguments are not compatible with the actual result. `TypeApplicationException` If the specified closed type argument values are not compatible with the actual result's type parameters.
`getDeclaredMethods` | Source Code `shared formal Method<Container,Type,Arguments>[] getDeclaredMethods<Container = Nothing, Type = Anything, Arguments = Nothing>(ClosedType<Annotation>[] annotationTypes) given Arguments satisfies Anything[]` Gets a list of methods matching the given container, return and parameter types, annotated with all the specified annotations, which are directly declared on this type. Since 1.1.0
`getInterface` | Source Code `shared formal MemberInterface<Container,Type>? getInterface<Container = Nothing, Type = Anything>(String name, ClosedType<Anything>[] types)` Gets a member interface by name. Returns `null` if not found. See `getClassOrInterface()` for how the `Container` type parameter works. Throws `IncompatibleTypeException` If the specified `Type` type argument is not compatible with the actual result, or if the corresponding member is not a `MemberInterface`. `TypeApplicationException` If the specified closed type argument values are not compatible with the actual result's type parameters.
`getInterfaces` | Source Code `shared formal MemberInterface<Container,Type>[] getInterfaces<Container = Nothing, Type = Anything>(ClosedType<Annotation>[] annotationTypes)` Returns the list of shared member interfaces on this class or interface and annotated with all the specified annotations. This includes inherited member interfaces but not unshared member interfaces. Since 1.1.0
`getMethod` | Source Code `shared formal Method<Container,Type,Arguments>? getMethod<Container = Nothing, Type = Anything, Arguments = Nothing>(String name, ClosedType<Anything>[] types) given Arguments satisfies Anything[]` Gets a method by name. Returns `null` if not found. See `getClassOrInterface()` for how the `Container` type parameter works. Throws `IncompatibleTypeException` If the specified `Type` or `Arguments` type arguments are not compatible with the actual result. `TypeApplicationException` If the specified closed type argument values are not compatible with the actual result's type parameters.
`getMethods` | Source Code `shared formal Method<Container,Type,Arguments>[] getMethods<Container = Nothing, Type = Anything, Arguments = Nothing>(ClosedType<Annotation>[] annotationTypes) given Arguments satisfies Anything[]` Gets a list of methods matching the given container, return and parameter types, annotated with all the specified annotations, which are declared on this type or inherited. Since 1.1.0

Inherited Methods
Methods inherited from: `Object` `equals()`
Methods inherited from: `ClosedType<Target>` `exactly()`, `intersection()`, `subtypeOf()`, `supertypeOf()`, `typeOf()`, `union()`