Kotlin 注解

文章目录

定义

注解使用annotation关键字定义,且只能用于普通类,该类被称为注释类。可以使用@注释类为某个变量、函数、类、接口等注释。与我们写的代码注释类似,注释类可以指明被标注类的状态、作用等等(注解一般是在代码检查、编译时使用,非专业人士了解一下即可,会用就行)。

kt 复制代码
// 定义注解
annotation class MyAnnotation()


// 标注变量(无论写在同一行还是换行都行)
@MyAnnotation val name = "Kotlin"

// 标注函数
@MyAnnotation
fun getName() = name


// 标注 lambda 函数
val myLambda = @MyAnnotation {
    
}


// 标注主构造函数(需要给出 constructor 关键字)
class MyClazz @MyAnnotation constructor()


// 标注 getter
val kVersion
    @MyAnnotation
    get() = "2.0.0"


// 标注类
@MyAnnotation
class MyClass


// 标注接口
@MyAnnotation
interface MyInterface

注解类中**不能声明成员(变量或方法),但可以在构造函数处声明成员变量。

如果注解类构造函数有参数,在标注时可以传入:

kt 复制代码
annotation class MyAnnotation(val name: String)


@MyAnnotation("MyClass")
class MyClass

注解类的注解

可以对注解类进行注解标记,以满足我们的需求(以下这些注解只能用于标注注解类)。

  • @Target用于指定可被注解类标记的类型,可以传入0个(此时无法标注)或多个枚举类AnnotationTarget的值。

    kt 复制代码
    // 指定只能对类别名 typealias 使用
    @Target(AnnotationTarget.TYPEALIAS)
    annotation class MyAnnotation()
    
    
    @MyAnnotation typealias Anything = Any
    
    
    // @MyAnnotation 此时不能标记 MyClass
    class MyClass
  • @Retention指定该注解是否存在于编译后的 class 文件中和是否在运行时反射可见,默认都为true(非专业人士表示不懂)。

  • @Repeatable指定该注解可以多次用于同一目标。默认为false

  • @MustBeDocumented指明该注解是公共 API(public API)并且在生成 API(generated API)的类或方法标签名中应该说明(非专业人士)。

标注目标声明

当我们标注时,可以声明被标注的目标:

kt 复制代码
annotation class MyAnnotation


// 标注 setter
@set:MyAnnotation
var name = "Kotlin"

可以使用的目标声明有:

  • file
  • property
  • field
  • get
  • set
  • receiver
  • param
  • setparam
  • delegate
相关推荐
Kapaseker14 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
A0微声z3 天前
Kotlin Multiplatform (KMP) 中使用 Protobuf
kotlin
alexhilton3 天前
使用FunctionGemma进行设备端函数调用
android·kotlin·android jetpack
lhDream3 天前
Kotlin 开发者必看!JetBrains 开源 LLM 框架 Koog 快速上手指南(含示例)
kotlin
RdoZam3 天前
Android-封装基类Activity\Fragment,从0到1记录
android·kotlin
Kapaseker4 天前
研究表明,开发者对Kotlin集合的了解不到 20%
android·kotlin
糖猫猫cc4 天前
Kite:两种方式实现动态表名
java·kotlin·orm·kite
如此风景5 天前
kotlin协程学习小计
android·kotlin
Kapaseker5 天前
你搞得懂这 15 个 Android 架构问题吗
android·kotlin
zh_xuan5 天前
kotlin 高阶函数用法
开发语言·kotlin