当前位置:嗨网首页>书籍在线阅读

13-注解使用场景目标

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

10.2.4 注解使用场景目标

把注解应用在属性或主构造方法的参数中时,Kotlin的注解可以转换成相对应的Java的注解,并且在生成Java字节码的过程中,注解可能还有很多不同的应用场景。如果要精确地指定对应的注解生成,需要参照以下规则。

class Example(@field:Ann val foo,   //标注Java字段
              @get:Ann val bar,     //标注Java getter
              @param:Ann val quux)  //标注Java构造函数参数

在这当中,标注@field、@get和@param都是Java的注解。当然,也可以使用相同的语法来标注整个文件,为了达到这个目的,只需要把带有目标file的注解放在文件的顶层,即放在包名和所有import语句之前。代码如下。

@file:JvmName("Foo")
package org.jetbrains.demo

如果在一个目标文件中出现多个注解,为了避免重复添加,可以在目标后面添加方括号,并把所有注解都放在方括号里面。

class Example {
      @set:[Inject VisibleForTesting]    //多个注解
      var collaborator: Collaborator
}

如果要标注扩展函数的接收者参数,可以使用以下语法。

fun @receiver:Fancy String.myExtension() { }

除了上面介绍的注解目标之外,Kotlin注解支持的使用场景目标(use-site target)标注主要有以下几种。

  • file:文件目标注解。
  • property:此目标注解对Java不可见。
  • field:自动返回字段。
  • get:属性getter。
  • set:属性setter。
  • receiver:拓展函数或属性的接收者参数。
  • param:构造函数参数。
  • setparam:属性 setter 参数。
  • delegate:存储在委托属性中的委托实例属性。

如果没有指定使用场景目标,则根据正在使用的@Target注解来选择目标;如果有多个可用目标,则使用param、property和field中的一个作为第一个适用目标。