Kotlin 面试题
目录

Kotlin 中 @Retention, @Target, @Repeatable, @MustBeDocumented 注解的作用是什么?

· 约 3 分钟读完 · 第 167 / 200 章

推荐答案

在 Kotlin 中,@Retention、@Target、@Repeatable 和 @MustBeDocumented 是用于自定义注解的元注解。它们的作用如下:

  • @Retention:指定注解的保留策略,决定注解在何时可用。常见的保留策略包括:

    • RetentionPolicy.SOURCE:注解仅在源代码中保留,编译时会被丢弃。
    • RetentionPolicy.BINARY:注解在编译后的字节码中保留,但在运行时不可用。
    • RetentionPolicy.RUNTIME:注解在运行时可用,可以通过反射访问。
  • @Target:指定注解可以应用的目标元素类型,如类、函数、属性等。常见的目标类型包括:

    • AnnotationTarget.CLASS:应用于类或接口。
    • AnnotationTarget.FUNCTION:应用于函数。
    • AnnotationTarget.PROPERTY:应用于属性。
    • AnnotationTarget.FIELD:应用于字段。
  • @Repeatable:允许同一个注解在同一个目标上多次使用。

  • @MustBeDocumented:指示注解应该包含在生成的 API 文档中。

本题详细解读

@Retention

@Retention 注解用于指定注解的保留策略。Kotlin 中的保留策略与 Java 类似,分为三种:

  1. SOURCE:注解仅在源代码中保留,编译时会被丢弃。这种策略通常用于编译时检查或代码生成工具。
  2. BINARY:注解在编译后的字节码中保留,但在运行时不可用。这种策略适用于需要在编译时处理注解的工具。
  3. RUNTIME:注解在运行时可用,可以通过反射访问。这种策略适用于需要在运行时处理注解的场景。

@Target

@Target 注解用于指定注解可以应用的目标元素类型。Kotlin 中的目标类型包括:

  • CLASS:应用于类或接口。
  • FUNCTION:应用于函数。
  • PROPERTY:应用于属性。
  • FIELD:应用于字段。
  • VALUE_PARAMETER:应用于函数或构造函数的参数。
  • EXPRESSION:应用于表达式。
  • FILE:应用于文件。

通过指定 @Target,可以限制注解的使用范围,确保注解只能应用于预期的目标。

@Repeatable

@Repeatable 注解允许同一个注解在同一个目标上多次使用。在 Kotlin 中,默认情况下,同一个注解不能在同一个目标上重复使用。通过使用 @Repeatable,可以解除这一限制,允许多次使用相同的注解。

@MustBeDocumented

@MustBeDocumented 注解指示注解应该包含在生成的 API 文档中。默认情况下,注解不会出现在生成的文档中。通过使用 @MustBeDocumented,可以确保注解的元信息在文档中可见,方便开发者理解注解的作用。

这些元注解为 Kotlin 中的注解提供了灵活的控制机制,使得注解的使用更加精确和规范。