Esta respuesta se basa en Scala 2.8.
// Will be visible to the Scala compiler, but not in the class file nor at runtime.
// Like RetentionPolicy.SOURCE
final class MyAnnotation extends StaticAnnotation
// Will be visible stored in the annotated class, but not retained at runtime.
// This is an implementation restriction, the design is supposed to support
// RetentionPolicy.RUNTIME
final class MyAnnotation extends ClassfileAnnotation
Para los detalles completos, véase el capítulo 11 "Definido por el usuario Anotaciones" en el Scala Reference Véase, por ejemplo: @tailrec.
ACTUALIZACIÓN La advertencia del compilador dice mejor:
>cat test.scala
final class MyAnnotation extends scala.ClassfileAnnotation
@MyAnnotation
class Bar
>scalac test.scala
test.scala:1: warning: implementation restriction: subclassing Classfile does not
make your annotation visible at runtime. If that is what
you want, you must write the annotation class in Java.
final class MyAnnotation extends scala.ClassfileAnnotation
Discussion
Me pregunto si realmente vale la pena? Las clases de anotación tienden a ser bastante pequeñas, por lo que no hay una ventaja real al escribirlas en Scala. Al igual que las enumeraciones, escríbelas Java y listo. – Martin