Annotation 介绍

Annotation

很常写 Java 或是 Kotlin 的朋友对 annotation 大概不陌生,它其实就是在程序码里面做标记,而这个标记做什麽或者背後隐含什麽意义,都是看处理这个 annotation 的地方。

下面的程序码就是 annotation 的范例,带有 @ 前缀的标示就是 Annotation 的开始。

@RssTag(name = "channel")

Annotation 可以标注在 class 、function 、 variable 或是 value 等元素上面,像下面范例就是对 class 和 value 标注 annotation。Annotation 也可以带一些自定义的资料进去,比方说像是 @RssTag 後面就多带了 nameorder 的属性,他的型别也可以是 StringIntArray 之类的。

@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 ,而只打算取两个值:

  1. <title> 取值放到 MyChanneltitle
  2. <author><iTunes:author> 取值,依照 order 里面定义的顺序阵列取值,先取 <iTunes:author> ,没有的话再取 <author> ,分别对应 @RssTag 里面的 order 定义: OrderType.ITUNESOrderType.RSS_STANDARD

这样我们就使用了 annotation 标注了我们客制的资料格式,annotation 帮助我们去对不同的资料样子去做对应,而我们的之後要讲解的 annotation processor 就是要利用 annotation 这一层对应关系,去产生出我们自己客制化的 data parser 。


<<:  [Day-14] R语言 - GMM 高斯混和模型 实作-下 feat EM调参 ( GMM & EM in R.Studio )

>>:  Day14,来试试OpenELB

Day 10 学习线上服务思考用户的数位防身术-国内篇

昨天分享介绍国外线上服务思考用户的数位防身术设计方式,今天就回到国内来看看目前国内线上服务实作,分析...

JavaScript Day27 - IIFE (立即函式)

IIFE IIFE (立即函式):IIFE (Immediately Invoked Functio...

D26 第十三周 (回忆篇)

这礼拜在写第十一周的作业,算是留言板的进阶版。 增加了编辑/删除功能 因为牵涉到使用者权限,需要判断...

Day 20 - 装个 Nessus 试试

这个旅程走了 2/3 了,还有 1/3(抱头) MAC 环境下安装 Nessus 先到 Nessu...

Spring Framework X Kotlin Day 28 Configuration

GitHub Repo https://github.com/b2etw/Spring-Kotlin...