Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you define an @interface in Scala?

Tags:

How does one create an @interface in Scala? I honestly feel stupid asking that question, but I can't find the syntax for this anywhere. I know that you can consume them, but how do you actually define new ones in Scala?

Java:

public @interface MyAnnotation { } 

Scala:

??? 
like image 407
Travis Gockel Avatar asked Feb 15 '10 12:02

Travis Gockel


1 Answers

This answer is based on 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 

For the full details, see section 11 "User Defined Annotations" in the Scala Reference See, for example: @tailrec.

UPDATE The compiler warning says it best:

>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

like image 106
retronym Avatar answered Sep 24 '22 07:09

retronym