"An annotation that may occur at most once at a given program element and only on certain program elements. An optional annotation is declared simply by having the annotation class satisfy `OptionalAnnotation` instead of [[Annotation]]. For example the following would only be allowed on `class` declarations: final annotation class ExampleClass() satisfies OptionalAnnotation<Example, ClassDeclaration> {} At runtime a [[ceylon.language.meta.declaration::Declaration]] instance can be queried for its `OptionalAnnotation`s of a certain type using [[ceylon.language.meta::annotations]] or [[ceylon.language.meta::optionalAnnotation]]." see(`interface Annotation`) shared interface OptionalAnnotation<out Value, in ProgramElement=Annotated, out Type=Anything> of Value satisfies ConstrainedAnnotation <Value,Value?,ProgramElement,Type> given Value satisfies OptionalAnnotation <Value,ProgramElement,Type> given ProgramElement satisfies Annotated {}