为了活动小家电-注解Annotation(二)

73 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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

指示生成的文档是否还可以包含相应的注释。
它主要用于创建库时。

为了活动小家电,下篇继续搞!