A class or interface declaration.
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.
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 | |
caseTypes | Source Code shared formal OpenType[] caseTypes If this type has an |
extendedType | Source Code shared formal OpenClassType? extendedType 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. |
isAlias | Source Code shared formal Boolean isAlias True if this type is an alias type, in which case the extendedType will contain the substituted type. |
satisfiedTypes | Source Code shared formal OpenInterfaceType[] satisfiedTypes 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 | |
annotatedDeclaredMemberDeclarations | Source Code Returns the list of member declarations that satisfy the given |
annotatedMemberDeclarations | Source Code Returns the list of member declarations that satisfy the given |
apply | Source 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:
|
declaredMemberDeclarations | Source Code Returns the list of member declarations that satisfy the given |
getDeclaredMemberDeclaration | Source Code Looks up a member declaration by name, provided it satisfies the given |
getMemberDeclaration | Source Code Looks up a member declaration by name, provided it satisfies the given |
memberApply | Source 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:
|
memberDeclarations | Source Code Returns the list of member declarations that satisfy the given |
Inherited Methods |
Methods inherited from: Object |
Methods inherited from: AnnotatedDeclaration |
Methods inherited from: GenericDeclaration |