携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的24天,点击查看活动详情
为了活动小家电,接着上篇搞!
元注解,注解的注解
在声明 Annotation 时,在 Kotlin 中,对前面的类进行注解,如下所示。
annotation class TestAnnotation
就这一行,就可以直接粘贴到其他代码中使用了@TestAnnotation。
并且,有一些元注释限制了这个注释的使用。
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
@Repeatable
@MustBeDocumented
annotation class TestAnnotation
相比Java中5种元注解少了@Inherited,在这里四种元注解中最常用的是前两种,接下来我们就来简单分析下这几种元注解
@Target
用于限制可以使用注释的位置。主要使用的参数如下。
(在这里查看完整列表)
- CLASS:限制类、接口、对象、注解类可用
- FUNCTION:限制对除构造函数之外的函数可用
- FIELD:限制为仅可用于包括支持字段在内的字段
- TYPE:限制在任何地方使用
上面的 TestAnnotation 是 @Target 并且只有 FUNCTION 和 CLASS,所以如果你尝试将它附加到一个字段,编译器会抛出一个错误。
@Retention
用于限制 Annotation 的范围,有 3 个参数。
- 它仅在SOURCE
编译时有用,不包含在构建的二进制文件中。
它仅在开发过程中有用,例如在开发过程中隐藏警告出现@suppress,并且在不需要包含在二进制文件中时使用。 - 它也包含在BINARY
编译时和二进制文件中,但不能通过反射访问。 - RUNTIME:也包含在编译时间和二进制文件中,可通过反射访问。
如果 @Retention 没有显示在 Custom Annotation 中,则默认为 RUNTIME。
@Repeatable
指示 Annotation 是否可以在一个元素上冗余使用。
@MustBeDocumented
指示生成的文档是否还可以包含相应的注释。
它主要用于创建库时。