很常写 Java 或是 Kotlin 的朋友对 annotation 大概不陌生,它其实就是在程序码里面做标记,而这个标记做什麽或者背後隐含什麽意义,都是看处理这个 annotation 的地方。
下面的程序码就是 annotation 的范例,带有 @
前缀的标示就是 Annotation 的开始。
@RssTag(name = "channel")
Annotation 可以标注在 class 、function 、 variable 或是 value 等元素上面,像下面范例就是对 class 和 value 标注 annotation。Annotation 也可以带一些自定义的资料进去,比方说像是 @RssTag
後面就多带了 name
和 order
的属性,他的型别也可以是 String
、 Int
或 Array
之类的。
@RssTag(name = "channel")
data class MyChannel(
val title: String?,
@RssTag(name = "author", order = [OrderType.ITUNES, OrderType.RSS_STANDARD])
val name: String?,
): Serializable
那这样的标注可以帮我们做什麽事?像上面的范例里,其实我们就是在表达下方的 RSS tag 结构。
<channel>
<title>the title</title>
<author>the author</author>
<itunes:author>itunes author</itunes:author>
</channel>
所以我们把 MyChannel 定义成 <channel>
tag 的结构,底下包含了三个 tag ,而只打算取两个值:
<title>
取值放到 MyChannel
的 title
里<author>
和 <iTunes:author>
取值,依照 order
里面定义的顺序阵列取值,先取 <iTunes:author>
,没有的话再取 <author>
,分别对应 @RssTag
里面的 order
定义: OrderType.ITUNES
和 OrderType.RSS_STANDARD
。这样我们就使用了 annotation 标注了我们客制的资料格式,annotation 帮助我们去对不同的资料样子去做对应,而我们的之後要讲解的 annotation processor 就是要利用 annotation 这一层对应关系,去产生出我们自己客制化的 data parser 。
<<: [Day-14] R语言 - GMM 高斯混和模型 实作-下 feat EM调参 ( GMM & EM in R.Studio )
昨天分享介绍国外线上服务思考用户的数位防身术设计方式,今天就回到国内来看看目前国内线上服务实作,分析...
IIFE IIFE (立即函式):IIFE (Immediately Invoked Functio...
这礼拜在写第十一周的作业,算是留言板的进阶版。 增加了编辑/删除功能 因为牵涉到使用者权限,需要判断...
这个旅程走了 2/3 了,还有 1/3(抱头) MAC 环境下安装 Nessus 先到 Nessu...
GitHub Repo https://github.com/b2etw/Spring-Kotlin...