什么是注解: 就是scala 编译器,就可以在编译的时候,注解有一些特殊的操作。 scala 中,有哪些地方可以添加注解? scala中,可以给类,方法,fields、local variable、constructor / method / functions parameters添加注解,而且scala是支持给某个目标添加多个注解的 有一个很金典的注解@BeanProperty ,让编译器自动生成JavaBean风格的Getter和Setter方法
如果给类的主构造函数添加函数
//如果给类的主构造函数添加函数,那么需要砸构造函数前添加一对圆括号
class Person @unchecked() (val name:String, val age:Int)
给表达式添加注解
val scores
= Map(
"leo"-> 90,
"Jack"-> 87)
(scores
.get(
"leo"):@unchecked)
match{
case score
=> println(score))
scala中自定义注解 要自己添加注解,就必须扩展Annotation trait,比如
class Test extends annotation.Annotation
@Test
class myTest
注解的参数:
class Test(var timeout :Int)extends annotation.Annotation
@Test(timeout=
100)
class myTest
class Test(var value:String) extends annotation.Annotation
常用注解介绍 scala中的常用注解全部是针对java的一些概念
@
volatile var name=
"jack"
jvm虚拟机中,可以有多个线程,每个线程都有自己的工作区,还有一些线程共享的工作区,每一个线程拿到一个公共的变量,都需要砸共享区中拷贝一个副本到自己的工作区中使用和修改,修改完成之后,再找一个合适的时机,将副本值,写回共享区中;这里就会出现一个多线程的并发访问安全的问题多个线程如果同时拷贝到了变量副本,都做了不同的修改然后一次将副本写回共享区中,都会一次覆盖掉之前的副本值,这将造成很多的变量副本的值丢失@valatile修饰的变量:它可以保证,一个线程在共享区中获取一个变量的值的副本时,都会强制刷新这个变量的值,保证自己获取到的这个变量的副本值时最新的,但是这种方法也不是百分百保险的
@transient var name=
"leo"
默认会讲一个对象中的所有字段的值,都序列化到磁盘文件中去加了@transient的字段,是瞬态的,序列化的时候会忽略这个值,反序列化这个值就没有了
@SeriaVersionUID(
value)
如果我们将一个类的对象序列化到磁盘上了,过了一段时间,这类的代码改变了,此时如果你想把磁盘中的对象反序列化回来,就会报错针对这个问题,就应该有一个序列化的版本号如果你的类改变了就应该重新生成一个序列化版本号反序列化的时候,就会发现序列化类型的版本号和代码中的版本号不一致
@native
@
throw(classOf[
Exception] def test())
@varargs def test(args:String*){}
@BeanProperty
@BooleanBeanProperty
@deprecated(message=
"")
@
unchecked