Kotlin学习(12)元编程、注解与反射

本文详细介绍了Kotlin中的元编程、注解及其使用。通过元注解@Target、@Retention、@Repeatable和@MustBeDocumented了解注解的声明。示例展示了如何创建和使用自定义注解,如@Run和@TestCase,以及如何通过反射处理注解信息。同时,文章还简要提及了Kotlin中的反射功能,包括类引用、函数引用和属性引用的使用。
摘要由CSDN通过智能技术生成

@Target(AnnotationTarget.CLASS,

AnnotationTarget.FUNCTION,

AnnotationTarget.VALUE_PARAMETER,

AnnotationTarget.EXPRESSION)

@Retention(AnnotationRetention.SOURCE)

@Repeatable

@MustBeDocumented

annotation class Run

从这个关键字上可以看出注解也是一种class,编译器同样可以对注解类型在编译器进行类型检查。

自定义的注解中使用的注解,称之为元注解。通过向注解类添加元注解的方式来指定其他属性。元注解说明如表:

| 元注解名称 | 功能说明 |

| — | — |

| @Target | 指定这个注解可被用于哪些元素 ( 这些元素定义在kotlin.annotation.AnnotationTarget 枚举类中。它们是:类 CLASS, 注解类 ANNOTATION_CLASS,泛型参数 TYPE_PARAMETER,函数 FUNCTION, 属性 PROPERTY, 用于描述域成员变量的 FIELD,局部变量 LOCAL_VARIABLE,VALUE_PARAMETER,CONSTRUCTOR,PROPERTY_GETTER,PROPERTY_SETTER, 用于描述类、接口(包括注解类型) 或enum声明的 TYPE, 表达式 EXPRESSION,文件 FILE,类型别名TYPEALIAS等 |

| @Retention | 指定这个注解的信息是否被保存到编译后的 class 文件中, 以及在运行时是否可以通过反射访问到它, 可取的枚举值有3个,分别是: SOURCE (注解数据不存储在二进制输出),BINARY(注解数据存储在二进制输出中, 但反射不可见), RUNTIME(注解数据存储在二进制输出中, 可用于反射 (默认值 ) |

| @Repeatable | 允许在单个元素上多次使用同一个注解 |

| @MustBeDocumented | 表示这个注解是公开 API 的一部分, 在自动产生的 API 文档的类或者函数签名中, 应该包含这个注解的信息。 |

2.2 使用注解

上面我们声明了Run注解,它可以使用在 CLASS、FUNCTION、VALUE_PARAMETER和EXPRESSION上,我们这里给出的示例使用在类上:

@Run

class SwordTest()

我们声明的 TestCase注解有个构造函数,传入的参数时一个String类型的ID,把这个注解用在函数上:

@Run

class SwordTest() {

@TestCase(id = “a”)

fun testCase(testId: String) {

println(“Run SwordTest Id = $testId”)

}

}

上面是注解在代码中的简单使用示例。其中的 @TestCase(id=“a”)是注解构造函数的使用。

注解可以带有参数的构造器。注解参数可支持的数据类型如下:

  • 基本数据类型

  • String

  • KClass

  • enum

  • Annotation

  • 上面的除了基本数据类型为引用的 数组

下面两种声明是不会通过的

annotation class TestCase1(val id: Array)

annotation class TestCase2(val id: SwordTest)

另外需要注意的是,注解类型中不能有null

  • 27
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值