iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0

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 。


上一篇
使用 XmlPullParser (三)
下一篇
Annotation 處理時機
系列文
如何使用 Kotlin Annotation Processor 做出自己的 Custom Data Parser Library30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言