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.
`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.
`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.
`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.
`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.
`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.
`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.
`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.
`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.

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