Annotation       ::=  ‘@’ SimpleType {ArgumentExprs}
  ConstrAnnotation ::=  ‘@’ SimpleType ArgumentExprs


Annotations associate meta-information with definitions. A simple annotation has the form @´c´ or @´c(a_1, ..., a_n)´. Here, ´c´ is a constructor of a class ´C´, which must conform to the class scala.Annotation.

Annotations may apply to definitions, types, or expressions. An annotation of a definition appears in front of that definition. An annotation of a type appears after that type. An annotation of an expression ´e´ appears after the expression ´e´, separated by a colon. More than one annotation clause may apply to an entity. The order in which these annotations are given does not matter.


@deprecated("Use D", "1.0") class C { ... } // Class annotation
@transient @volatile var m: Int             // Variable annotation
String @local                               // Type annotation
(e: @unchecked) match { ... }               // Expression annotation

Predefined Annotations

Java Platform Annotations

The meaning of annotation clauses is implementation-dependent. On the Java platform, the following annotations have a standard meaning.

private final static SerialVersionUID = <longlit>

Java Beans Annotations

Deprecation Annotations

Scala Compiler Annotations

When applied to value definitions that have non-volatile types, the annotation has no effect.

User-defined Annotations

Other annotations may be interpreted by platform- or application-dependent tools. The class scala.annotation.Annotation is the base class for user-defined annotations. It has two sub-traits:

Host-platform Annotations

The host platform may define its own annotation format. These annotations do not extend any of the classes in the scala.annotation package, but can generally be used in the same way as Scala annotations. The host platform may impose additional restrictions on the expressions which are valid as annotation arguments.