如何定义注解
在类前面增加annotation即可
annotation class Anno2(val bar:String) {
}
元注解
与JAVA类似。Retention表示注解用途;Target表示注解作用位置
精准控制注解的位置
data class User(
@AnnoKey("lichaojun")
val name:String
)
上述代码中的注解,不知道他作用在了哪个地方。因为name有多重含义,即是构造函数的参数,也是类成员属性,还包含了getter函数。
为了解决以上问题,Kotlin引入了精确控制注解位置的语法
@file:AnnoKey("lichaojun") // 作用在文件
@property:AnnoKey("lichaojun") // 作用在属性
@field:AnnoKey("lichaojun") // 作用在字段
@set:AnnoKey("lichaojun") // 作用在Setter
@get:AnnoKey("lichaojun") // 作用在Getter
@receiver:AnnoKey("lichaojun") // 作用在扩展函数或属性
@param:AnnoKey("lichaojun") // 作用在构造函数参数
@setparam:AnnoKey("lichaojun") // 作用在Setter的参数
@delegate:AnnoKey("lichaojun") // 作用在存储代码实例的字段
通过反射获取注解
@Retention(AnnotationRetention.RUNTIME)
annotation class AnnoKey(val key:String) {
}
@AnnoKey("lcj")
data class User(
val name:String
)
fun show() {
val annoKey = User::class.annotations.find {
it is AnnoKey
} as AnnoKey?
println("lichaojun12345>>>>>>>>>> ${annoKey?.key}")
}