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()
.
no type hierarchy
Attributes | |
caseTypes | Source Codeshared formal OpenType[] caseTypes If this type has an |
extendedType | Source Codeshared formal OpenClassType? extendedType This type's extended type, unless this is the class for Anything, whichis the root of the type hierarchy and thus does not have any extended type. |
isAlias | Source Codeshared formal Boolean isAlias True if this type is an alias type, in which case the |
satisfiedTypes | Source Codeshared 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 Codeshared formal Kind[] annotatedDeclaredMemberDeclarations<Kind, Annotation>() Returns the list of member declarations directly declared on this class or interface, which satisfy the given
|
annotatedMemberDeclarations | Source Codeshared formal Kind[] annotatedMemberDeclarations<Kind, Annotation>() Returns the list of shared member declarations that satisfy the given |
apply | Source Codeshared formal ClassOrInterface<Type> apply<Type = Anything>(AppliedType<Anything>* typeArguments) 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 Codeshared formal Kind[] declaredMemberDeclarations<Kind>() Returns the list of member declarations directly declared on this class or interface,
which satisfy the given |
getDeclaredMemberDeclaration | Source Codeshared formal Kind? getDeclaredMemberDeclaration<Kind>(String name) Looks up a member declaration directly declared on this class or interface, by name,
provided it satisfies the given |
getMemberDeclaration | Source Codeshared formal Kind? getMemberDeclaration<Kind>(String name) Looks up a shared member declaration by name,
provided it satisfies the given |
memberApply | Source Codeshared formal Member<Container,ClassOrInterface<Type>>&ClassOrInterface<Type> memberApply<Container = Nothing, Type = Anything>(AppliedType<Object> containerType, AppliedType<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 Codeshared formal Kind[] memberDeclarations<Kind>() Returns the list of shared member declarations that satisfy the
given |
Inherited Methods |
Methods inherited from: Object |
Methods inherited from: Annotated |
Methods inherited from: AnnotatedDeclaration |
Methods inherited from: GenericDeclaration |