Direct Known Satisfying Interfaces: ClassDeclaration, InterfaceDeclaration

A class or interface declaration.

Usage sample for toplevel classes

Because some classes have type parameters, getting a model requires applying type arguments to the class declaration with apply in order to be able to instantiate that class. For example, here is how you would obtain a class or interface model that you can instantiate from a toplevel class declaration:

class Foo<T>() {
    string => "Hello, our T is: ``typeLiteral<T>()``";
}

void test(){
    // We need to apply the Integer closed type to the Foo declaration in order to get the Foo<Integer> closed type
    ClassOrInterface<Foo<Integer>> classOrInterfaceModel = `class Foo`.apply<Foo<Integer>>(`Integer`);
    assert(is Class<Foo<Integer>,[]> classOrInterfaceModel);
    // This will print: Hello, our T is: ceylon.language::Integer
    print(classOrInterfaceModel());
}

Note that there are more specialised versions of apply in ClassDeclaration.classApply and InterfaceDeclaration.interfaceApply.

Usage sample for member classes

For member classes or interfaces it is a bit longer, because member types need to be applied not only their type arguments but also the containing type, so you should use memberApply and start by giving the containing closed type:

class Outer(){
    shared class Inner(){
        string => "Hello";
    }
}

void test(){
    // apply the containing closed type `Outer` to the member class declaration `Outer.Inner`
    value memberClassModel = `class Outer.Inner`.memberApply<Outer,Outer.Inner>(`Outer`);
    assert(is MemberClass<Outer,Outer.Inner,[]> memberClassModel);
    // We now have a MemberClass, which needs to be applied to a containing instance in order to become an
    // invokable class model:
    Class<Outer.Inner,[]> boundMemberClassModel = memberClassModel(Outer());
    // This will print: Hello
    print(boundMemberClassModel());
}

Note that there are more specialised versions of memberApply in ClassDeclaration.memberClassApply and InterfaceDeclaration.memberInterfaceApply.

Attributes
caseTypesSource Code

If this type has an of clause, this is the list of case types for the current type.

extendedTypeSource Code

This type's extended type, unless this is the class for Anything, which is the root of the type hierarchy and thus does not have any extended type.

isAliasSource Code
shared formal Boolean isAlias

True if this type is an alias type, in which case the extendedType will contain the substituted type.

satisfiedTypesSource Code

The list of types satisfied by this type.

Inherited Attributes
Attributes inherited from: Object
Attributes inherited from: Declaration
Attributes inherited from: GenericDeclaration
Attributes inherited from: NestableDeclaration
Attributes inherited from: TypedDeclaration
Methods
annotatedDeclaredMemberDeclarationsSource Code
shared formal Kind[] annotatedDeclaredMemberDeclarations<Kind, Annotation>()
given Kind satisfies NestableDeclaration

Returns the list of member declarations that satisfy the given Kind type argument and that are annotated with the given Annotation type argument

annotatedMemberDeclarationsSource Code
shared formal Kind[] annotatedMemberDeclarations<Kind, Annotation>()
given Kind satisfies NestableDeclaration

Returns the list of member declarations that satisfy the given Kind type argument and that are annotated with the given Annotation type argument

applySource Code

Applies the given closed type arguments to this toplevel class or interface declaration in order to obtain a class or interface model. See this code sample for an example on how to use this.

Throws:
declaredMemberDeclarationsSource Code
shared formal Kind[] declaredMemberDeclarations<Kind>()
given Kind satisfies NestableDeclaration

Returns the list of member declarations that satisfy the given Kind type argument.

getDeclaredMemberDeclarationSource Code
shared formal Kind? getDeclaredMemberDeclaration<Kind>(String name)
given Kind satisfies NestableDeclaration

Looks up a member declaration by name, provided it satisfies the given Kind type argument. Returns null if no such member matches.

getMemberDeclarationSource Code
shared formal Kind? getMemberDeclaration<Kind>(String name)
given Kind satisfies NestableDeclaration

Looks up a member declaration by name, provided it satisfies the given Kind type argument. Returns null if no such member matches.

memberApplySource Code
shared formal Member<Container,ClassOrInterface<Type>>&ClassOrInterface<Type> memberApply<Container = Nothing, Type = Anything>(Type<Container> containerType, Type<Anything>[] typeArguments)

Applies the given closed container type and type arguments to this member class or interface declaration in order to obtain a member class or interface model. See this code sample for an example on how to use this.

Throws:
  • IncompatibleTypeException

    If the specified Container or Type type arguments are not compatible with the actual result.

  • TypeApplicationException

    If the specified closed container type or type argument values are not compatible with the actual result's container type or type parameters.

memberDeclarationsSource Code
shared formal Kind[] memberDeclarations<Kind>()
given Kind satisfies NestableDeclaration

Returns the list of member declarations that satisfy the given Kind type argument.

Inherited Methods
Methods inherited from: Object
Methods inherited from: AnnotatedDeclaration
Methods inherited from: GenericDeclaration