接下来就可以利用上面的 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 帅到不行的安装包 [更改打包语言]
v-bind v-bind常与class和style的绑定,可以用於绑定一个或是多个属性(class...
大家好~ 我是五岁~ 今天来把四族战车的下半部完成吧~! 首先来画靠近我们的那两只脚,如果线画不直的...
今日我们将要介绍ES官方提供go-elasticsearch客户端的基本操作。 go-elastic...
话不多说先上图 从左到右依序执行,最後该函式会再呼叫自己一次,图中淡化的区块是下个章节的主题 然後把...
今天想要跟大家分享的是跨栏位验证的小技巧,这个小技巧其实没有多厉害或多特别,只是可能满多人刚好不知...