Annotation in Kotlin

接下来就可以利用上面的 meta-annotation 去定义我们的属性。

@Target(AnnotationTarget.CLASS, AnnotationTarget.PROPERTY)
@Retention(AnnotationRetention.SOURCE)
annotation class RssTag

我们把 @RssTag 这个 annotation 定义为可以标注在 class 和 class 的 property ,然後 retention 下在 SOURCE ,因为我们使用 annotation processor ,不是用 reflection 也不需要存在 compile 过的档案。

Annotation 里面还可以塞自己定义的属性,像是字串、阵列,甚至是自定义的 class 型别也是可以的。在这边,我们加入要 parse 的 tag 名称和它爬的平台顺序阵列。

enum class OrderType {
    RSS_STANDARD, ITUNES, GOOGLE
}

@Target(AnnotationTarget.CLASS, AnnotationTarget.PROPERTY)
@Retention(AnnotationRetention.SOURCE)
annotation class RssTag(
    val name: String = "",
    val order: Array<OrderType> = [OrderType.RSS_STANDARD, OrderType.ITUNES, OrderType.GOOGLE]
)

当我们在读取 annotation 时,马上就可以知道该 class 和 property 是要存放哪个名称的 tag ,以及它的平台读取的优先顺序。除了 tag 之外,我们也可以针对 RSS value 和 attribute 去定义 @RssValue@RssAttribute 。如果这个 tag 的名称很特别,我们想要特别客制一个去爬取资料,也有定义 @RssRawData 来处理这种状况。下篇文章我们将会讲解这几个 annotation 的设计想法。

参考资料:

https://kotlinlang.org/docs/annotations.html


<<:  自动化测试,让你上班拥有一杯咖啡的时间 | Day 2 - Cypress 环境设定

>>:  @Day16 | C# WixToolset + WPF 帅到不行的安装包 [更改打包语言]

Day 13 Class与v-bind

v-bind v-bind常与class和style的绑定,可以用於绑定一个或是多个属性(class...

DAY 22 - 四足战车 (3)

大家好~ 我是五岁~ 今天来把四族战车的下半部完成吧~! 首先来画靠近我们的那两只脚,如果线画不直的...

Day27 go-elasticsearch(一)

今日我们将要介绍ES官方提供go-elasticsearch客户端的基本操作。 go-elastic...

Chapter1-DJ最爱的音频动感图像(IV)让音乐动起来!开篇基础设定和动画框架

话不多说先上图 从左到右依序执行,最後该函式会再呼叫自己一次,图中淡化的区块是下个章节的主题 然後把...

Angular 深入浅出三十天:表单与测试 Day27 - Reactive Forms 进阶技巧 - 跨栏位验证

今天想要跟大家分享的是跨栏位验证的小技巧,这个小技巧其实没有多厉害或多特别,只是可能满多人刚好不知...