第十六章 注解¶
什么是注解¶
注解是那些你插入到代码中以便有工具可以对它们进行处理的标签。
注解的语法和Java一样,可以对scala类使用Java注解,也可以使用Scala注解,scala注解是scala独有的。Java注解不影响编译器如何将源码编译成字节码,而Scala可以影响到编译过程。
什么可以被注解¶
在scala中,你可以为类、方法、字段、局部变量和参数添加注解,和Java一样。
@Entity class Credentials
@Test def test(){}
@BeanProperty var username = _
def doSomething(@NotNull message:String){}
也可以同时添加多个注解,先后次序没有影响。
@BeanProperty @Id var username = _
在给主构造器添加注解的时候,需要将注解放置在构造器之前,并加上一对圆括号(如果注解不带参数的话)
class Credential @inject() (var username:String, var password:String)
还可以为表达式添加注解,需要在表达式后面添加冒号,然后注解本身。
也可以为类型参数添加注解:
class MyContainer[@specialized T]
针对实际类型的注解应该放在类型名称之后:
String @cps[Unit]
注解参数¶
Java注解可以有带名参数:
@Test(timeout=100, expected=classOf[IOException])
如果参数名为 Value
,则参数名可以直接省略。如果注解不带参数,则圆括号可以省去。
@Named("credt") var credentials:Credentials = _
大多数注解参数都有缺省值。
Java注解的参数类型只能为:
- 数值型字面量
- 字符串
- 类字面量
- Java枚举
- 其他注解
scala注解可以是任何类型。
注解实现¶
注解必须扩展 Annotation
特质。