- @Target
- @Retention
- @Repeatable
- @MustBeDocumented
??Kotlin 中的注解本質(zhì)上是一種接口類型。Kotlin 標(biāo)準(zhǔn)庫中提供一些基本注解和元注解?;咀⒔鈺绊懢幾g器的行為,如@JvmName、@JvmField、JvmStatic、@JvmOverloads 和 @Throws 等,這些基本注解主要用于 Kotlin 與 Java 的混合編程中。元注解是負(fù)責(zé)注解其他的注解,自定義注解會用到元注解。
??Kotlin 元注解有 4 個,其中包括 Target、Retention、Repeatable 和 MustBeDocumented,它們都位于 kotlin.annotation 包中。元注解是為其他注解進(jìn)行說明的注解,當(dāng)自定義一個新的注解類型時,其中可以使用元注解。
@Target
??@Target 使用于目標(biāo)注解,它用來指定一個新注解的使用目標(biāo)。@Target 注解有一個 allowedTargets 屬性,該屬性用來設(shè)置使用目標(biāo),allowedTargets 是 kotlin.annotation.AnnotationTarget 枚舉類型的數(shù)組,AnnotationTarget描述 Kotlin 代碼中可以被注解的元素類型,它有 15 個枚舉常量。如下:
| 常量 | 使用目標(biāo) |
|---|---|
| CLASS | 類、接口、對象聲明和注解類聲明 |
| ANNOTATION_CLASS | 其他注解類型聲明 |
| TYPE_PARAMERTER | 用于泛型中類型參數(shù)聲明 |
| PROPERTY | 屬性聲明 |
| FIELD | 字段聲明,包括屬性的支持字段 |
| LOCAL_VARIABLE | 局部變量聲明 |
| VALUE_PARAMETER | 用于函數(shù)或構(gòu)造函數(shù)參數(shù)值聲明 |
| CONSTRUCTOR | 用于構(gòu)造函數(shù)聲明 |
| FUNCTION | 用于函數(shù)聲明,不包括構(gòu)造函數(shù) |
| PROPERTY_GETTER | 只用于屬性的getter訪問器聲明 |
| PROPERTY_SETTER | 只用于屬性的setter訪問器聲明 |
| TYPE | 類型使用 |
| EXPRESSION | 任何表達(dá)式 |
| FILE | 文件 |
| TYPEALIAS | 類型別名 |
@Retention
??@Retention 使用于保留期注解,它用來指定一個新注解的有效范圍,@Retention 注解有一個 value 屬性,該屬性用來設(shè)置保留期,value 是 kotlin.annotation.AnnotationRetention 枚舉類型,AnnotationRetention 描述注解保留期種類,它有 3 個常量,如下:
| 常量 | 保留期 |
|---|---|
| SOURCE | 只適用于源代碼文件中,此范圍最小 |
| BINARY | 編譯器把注解信息記錄在編譯之后的二進(jìn)制文件中,對于反射是不可見的,此范圍居中 |
| RUNTIME | 編譯器把注解信息記錄在編譯之后的二進(jìn)制文件中,對于反射是可見的,此范圍最大,這是默認(rèn)保留期 |
@Repeatable
??@Repeatable 適用于可重復(fù)注解,它允許在相同的程序元素中重復(fù)注解,可重復(fù)的注解必須使用 @Repeatable 進(jìn)行注解。
@MustBeDucomented
??@MustBeDucomented 適用于文檔注解,該注解可以修飾代碼元素(類、接口、函數(shù) 和 屬性等),文檔生成工具可以提取這些注解信息。