Annotation Use-site Targets

当你标注一个属性类型或构造器参数时,会有很多对应于Kotlin元素的Java元素被生成,因此多个注解的可能性位置会存在于生成的字节码中。为了指定注解被怎样生成,需要使用下面的语法:

class Example(@field:Ann val foo, // annotate Java field
                @get:Ann val bar, // annotate Java getter
                @param:Ann val quux) // annotate Java constructor parameter

同样的语法可以用在标注整个文件上。只需要将注解放置在文件的最顶级,在包的声明或导入文件声明之前:

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

如果你有多个注解标注同一个对象,你可以使用方括号来避免重复的标注,并把所有的注解都放置在方括号中:

class Example {
    @set:[Inject VisibleForTesting]
    var collaborator: Collaborator
}

支持的所有的use-site注解如下:

  • file
  • property(这个注解对Java来说不可见)
  • field
  • get(getter)
  • set(setter)
  • receiver(扩展函数或属性的接收者参数)
  • param(构造器参数)
  • setparam(setter的参数)
  • delegate(存储委派属性的委派实例的属性)

为了标注扩展函数的接收器参数,使用下面的语法:

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

如果你不想指定一个use-site目标,那么目标就会根据@Target注解来选择。如果有很多可用选项,以下列表的第一个可用的选项将会被使用:

  • param
  • property
  • field

results matching ""

    No results matching ""