例如:
annotation class AnnoX(val value: String)
annotation class AnnoY(
val message: String
val annoX: AnnoX = AnnoX(“X”))
2.3 处理注解
如果没有相应的注解信息处理逻辑流程,那么注解可以说是废了,没有什么实用价值。
首先,我们的目标测试类是:
@Run
class SwordTest() {
@TestCase(id = “a”)
fun testCase(testId: String) {
println(“Run SwordTest Id = $testId”)
}
}
我们需要在 @TestCase注解作用在函数上的处理过程
::class
引用
首先声明一个变量指向SwordTest实例
然后就可以通过这个变量来获取该对象的类的信息,使用 ::class
来获取 sword对象实例的 KClass类的引用
val sword = SwordTest()
val kClass = sword::class
//有点像Java中的 getClass()
//上面这行代码,Kotlin编译器会自动推断出 kClass变量的类型是
val kClass:KClass = sword::class
- members扩展属性
下面我们需要获取 sword对象类型所声明的所有函数。Kotlin中 可以直接使用扩展属性 declaredFunctions来获取这个类中声明的所有函数。
//返回的是一个 Collection<KCallable<>> 其中是Koltlin泛型中的星投影
val members = kClass.members
- annotations属性
KFunction 类型继承了 KCallable,KCallable又继承了 KAnnotatedElement。KAnnotatedElement中有个public val annotations:List</