Chapter 27《Annotations》

  • 注解是添加到程序源代碼中的結構化信息告材,可以出現(xiàn)在變量,方法步鉴,表達式或者其他元素上揪胃,和注釋不同,注解是由結構的氛琢,更易于被機器處理喊递。

注解的存在意義

  • 編寫程序在編譯和運行之外還有別的方面,比如說可以生成說明文檔阳似,代碼具有規(guī)范的格式骚勘,或者檢查在不同的控制路徑上,文件打開而忘記了關閉障般。這些工具成為元編程工具调鲸,因為其輸入的參數(shù)為其他程序。程序員可以通過注解在源代碼中以添加指令的方式來支持這些工具挽荡。在沒有用戶輸入的情況下藐石,注解就更方便,比如可以在生成文檔的時候告知哪些方法是過時的定拟,代碼格式化的時候可以跳過手動格式化的部分等于微。
  • Scala支持元編程工具的方法是使用注解系統(tǒng)逗嫡,編譯器理解注解,但并不對每個注解附加任何含義株依,這個每個元編程工具有可以定義它們自己特定的注解驱证。

注解的語法

  • @deprecated,對整個方法有效恋腕。注解可以被用在任何地方抹锄,包括val,var荠藤,def伙单,class,object哈肖,traittype等吻育,注解對于跟在其后的整個聲明或者定義是有效的。
  • 注解也可以運用在表達式中淤井,比如在模式匹配中使用(x: @unchecked)布疼,注解還有更豐富的形式,@annot(expr1, expr2, expr3)币狠,annot是注解類名游两,剩余的是入?yún)ⅰR话阍试S為注解提供的參數(shù)都是常量总寻,但只要能夠通過編譯器檢查類型即可器罐。
  • Scala內(nèi)部將注解表示為僅僅是對某個注解類的構造方法的調(diào)用。Scala編譯器支持注解的帶名參數(shù)和默認參數(shù)渐行。如果注解的入?yún)⑹莿e的注解轰坊,只能使用new,而不能使用@祟印,因為注解并不是合法的表達式肴沫。
  • 一個類繼承了scalaAnnotation類,就是一個注解了蕴忆〔遥可以使用@來進行標注。

標準注解

  • Scala中包括了若干注解套鹅,是為一些非常常用的功能服務的站蝠,因此被放在了語言規(guī)范中,但是還是沒有自己的語法卓鹿。
@deprecation
  • 過時可以使得使用了你的舊版本的別人的代碼仍舊可以通過編譯菱魔,再有人調(diào)用這個方法就會得到一個過時警告,可以接收一個String參數(shù)吟孙,用于解釋過時的原因澜倦。
@volatile
  • 告訴編譯器聚蝶,這個變量會被多個線程使用,這樣的變量實現(xiàn)的效果使得讀寫更慢藻治,但是從多個線程訪問時的行為更為可期碘勉。
  • Java平臺上,使用的效果和使用volatile關鍵字是一樣的桩卵。
二進制序列化
  • 序列化將對象轉換為字節(jié)流验靡,反序列化將字節(jié)流轉換為對象,在將對象保存到磁盤或者通過網(wǎng)絡發(fā)送的應用場景下非常有用吸占,Scala沒有自己的序列化框架晴叨,使用的是底層平臺提供的框架。
      1. @serializable表示某個類是否可被序列化矾屯,一般情況下,大多數(shù)類都是可序列化的初厚,但是比如說套接字或者GUI的窗體是不可被序列化的件蚕、
      1. @SerialVersionUID(1234)可以處理隨著時間推移發(fā)生變化的可序列化的類〔蹋可以添加這樣一個注解來對某個類的當前版本帶上序列號排作,序列化框架會將這個序列號保存在生成的字節(jié)流中,從字節(jié)流中恢復對象的時候亚情,可以檢查兩者的序列號是否相同妄痪。
      1. @transient注解用來標注不能被序列化的字段,當對象被重新載入的時候楞件,該字段會被恢復成對應類型的默認值衫生。
自動的get和set方法
  • 通常不需要顯示給出getset方法,不過特定平臺的框架會期望setget方法土浸,因此可以使用@scala.reflect.BeanProperty注解罪针,編譯器會為該字段自動生成getset方法,但是只有編譯完成這兩個方法才能被使用黄伊。被添加的字段為crazy泪酱,get生成的方法為getCrazyset成成的方法為setCrazy还最。
      1. @尾遞歸
        為了確保Scala編譯器對該方法執(zhí)行尾遞歸墓阀,在方法定義之前添加@tailrec注解。
      1. @不檢查
        使用unchecked告訴編譯器忽略模式匹配中case的不完整情況拓轻。
      1. @native
        告訴編譯器某個方法的實現(xiàn)是由運行時而不是Scala代碼提供的斯撮,
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市悦即,隨后出現(xiàn)的幾起案子吮成,更是在濱河造成了極大的恐慌橱乱,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粱甫,死亡現(xiàn)場離奇詭異泳叠,居然都是意外死亡,警方通過查閱死者的電腦和手機茶宵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門危纫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人乌庶,你說我怎么就攤上這事种蝶。” “怎么了瞒大?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵螃征,是天一觀的道長。 經(jīng)常有香客問我透敌,道長盯滚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任酗电,我火速辦了婚禮魄藕,結果婚禮上,老公的妹妹穿的比我還像新娘撵术。我一直安慰自己背率,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布嫩与。 她就那樣靜靜地躺著寝姿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蕴纳。 梳的紋絲不亂的頭發(fā)上会油,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音古毛,去河邊找鬼翻翩。 笑死,一個胖子當著我的面吹牛稻薇,可吹牛的內(nèi)容都是我干的嫂冻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼塞椎,長吁一口氣:“原來是場噩夢啊……” “哼桨仿!你這毒婦竟也來了?” 一聲冷哼從身側響起案狠,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤服傍,失蹤者是張志新(化名)和其女友劉穎钱雷,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吹零,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡罩抗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了灿椅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片套蒂。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖茫蛹,靈堂內(nèi)的尸體忽然破棺而出操刀,到底是詐尸還是另有隱情,我是刑警寧澤婴洼,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布骨坑,位于F島的核電站,受9級特大地震影響柬采,放射性物質(zhì)發(fā)生泄漏卡啰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一警没、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧振湾,春花似錦杀迹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至大州,卻和暖如春续语,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背厦画。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工疮茄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人根暑。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓力试,卻偏偏與公主長得像,于是被迫代替她去往敵國和親排嫌。 傳聞我的和親對象是個殘疾皇子畸裳,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容