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
相关推荐
有点感觉1 天前
Android级联选择器,下拉菜单
kotlin
zhangphil1 天前
Android Coil3缩略图、默认占位图placeholder、error加载错误显示,Kotlin(1)
android·kotlin
xvch2 天前
Kotlin 2.1.0 入门教程(二十三)泛型、泛型约束、协变、逆变、不变
android·kotlin
xvch3 天前
Kotlin 2.1.0 入门教程(二十四)泛型、泛型约束、绝对非空类型、下划线运算符
android·kotlin
zhangphil4 天前
Android Coil ImageLoader MemoryCache设置Key与复用内存缓存,Kotlin
android·kotlin
mmsx4 天前
kotlin Java 使用ArrayList.add() ,set()前面所有值被 覆盖 的问题
android·开发语言·kotlin
lavins4 天前
android studio kotlin项目build时候提示错误 Unknown Kotlin JVM target: 21
jvm·kotlin·android studio
面向未来_4 天前
JAVA Kotlin Androd 使用String.format()格式化日期
java·开发语言·kotlin
alexhilton4 天前
选择Retrofit还是Ktor:给Android开发者的指南
android·kotlin·android jetpack
GordonH19914 天前
Kotlin 优雅的接口实现
android·java·kotlin