黑猴子的家:Scala 注解实现

我个人觉得,通过我手册学习的,不会有很强的意愿和必要去实现他们自己的Scala注解,本章节的主旨是,让大家能够明白,已经有的注解类是如何实现的
注解必须扩展Annotation特质。例如unchecked注解定义如下

class unchecked extends annotation.Annotation

类型注解必须扩展自TypeAnnotationte特质

class Localized extends StaticAnnotation with TypeConstraint

你可以实现自己的注解,但是更多的是使用Scala和Java提供的注解。
尖叫提示:如果你想要实现一个新的Java注解,则需要用Java 来编写这个注解类。当然了,是肯定可以在Scala类中使用的

一般而言,注解的作用是描述哪些被注解的表达式、变量、字段、方法、类或者类型。举例来说,如下注解

def check(@Notnull password:String)

是针对参数变量password的,不过,Scala的字段定义可能会引出多个Java特性,而他们都有可能被添加注解。举例来说有如下定义

class Credentials(@Notnull @BeanProperty var username:String)

在这里,总共有六个可以被注解的目标
(1)构造器参数
(2)私有的示例字段
(3)取值器方法username
(4)改值器方法username = _
(5)bean取值器getUsername
(6)bean改值器setUsername
默认情况下,构造器参数注解,仅会被应用到参数自身,而字段注解只能应用到字段。
元注解@param、@field、@getter、@setter、@beanGetter 和 @beanSerter 将使的注解被附在别处,举例来说,@deprecated注解的定义如下

@getter @setter @beanGetter @beanSetter
class deprecated(message:String =””,since:String =””)  extends annotation.StaticAnnotation

你也可以临时根据需要应用这些元注解

@Entity class Credentials{
  @(Id @beanGetter) @BeanProperty var id = 0
}

在这种情况系啊,@Id注解将被应用到Java的getId方法(这是JPA要求的方法,用来访问属性字段的)

转载于:https://www.jianshu.com/p/820b2ff61d14

猜你喜欢

转载自blog.csdn.net/weixin_34416649/article/details/91182516