亂七八糟的準(zhǔn)備一下
學(xué)習(xí)這個之前,以前很多時候都是搜視頻,博客啥的?,F(xiàn)在我們盡量從官方文檔入手,再配合一些別的進(jìn)行深入學(xué)習(xí)一下。
首先想到j(luò)dk安裝目錄下好像有docs目錄,這個貌似可以搜索Annotation這個接口…let’s find it.找了一下發(fā)現(xiàn)我的jdk下面并沒有?其實(shí)我們可以去java官網(wǎng)下載文檔, 這里給一個地址:?https://docs.oracle.com/javase/6/docs/?其他版本改下鏈接就行,相當(dāng)于在線文檔, 你可以下載離線版本那種。進(jìn)入后

看下java.lang.annotation這個接口,可以看到很多屬性定義:

我們點(diǎn)擊這個Documented進(jìn)入看下,這里有解釋:
Indicates that annotations with a type are to be documented by javadoc and similar tools by default. This type should be used to annotate the declarations of types whose annotations affect the use of annotated elements by their clients. If a type declaration is annotated with Documented, its annotations become part of the public API of the annotated elements.
大概意思說:指定了這種類型的注解會默認(rèn)被javadoc和類似的工具記錄下來, 成為已注解元素api的一個部分。
你用javadoc編譯的話,這個標(biāo)記了這種類型的注解將會出現(xiàn)再文檔中, xxxx.html. 這里面有專門的案例Java注解之Retention、Documented、Inherited介紹
特別聲明,注解是jdk1.5才增加了,以前是木有的!
第一個我們算是基本認(rèn)識了,后面我們就可以接著第二個第三個看….我們重點(diǎn)android自定義注解將會涉及到的: Target Retention
@a Target

如果直接google翻譯啥的,看著很蒙。我看著都蒙。oschina上面也有在線文檔,已經(jīng)翻譯好了,可以參考java API文檔列表
簡單從字面意思來看就是指示了注解的目標(biāo)是什么類型,比如類,變量,函數(shù),局部變量等,如果你指定錯誤了,有可能就無法通過反射獲取變量,方法名稱。大概先這么理解吧! 后面一步步深入。 我們看著這個ANNOTATION_TYPE:
看下面截圖:

目前常用也就: ElementType.FIELD ElementType.METHOD ElementType.TYPE 基本夠我們做android注解用了。一看名稱也大概知道都是什么了。。。所以一開始我們就簡單理解下,肯定還需要深入!
@b Retention
我們接著看下Retention:
Indicates how long annotations with the annotated type are to be retained. If no Retention annotation is present on an annotation type declaration, the retention policy defaults to RetentionPolicy.CLASS.
A Target meta-annotation has effect only if the meta-annotated type is use directly for annotation. It has no effect if the meta-annotated type is used as a member type in another annotation type.
意思是說了一個保留策略的問題,也就是有效期。如果不指定的話默認(rèn)在.class之后就無效了,被丟棄了。你運(yùn)行時要想獲取就沒辦法了。所以我們看下RUNTIME

很好理解, 一個是源碼階段,一個是編譯階段,一個是運(yùn)行階段。你之前使用過butterknife或者類似注解庫就知道我們的都是在onCreate進(jìn)行的注解初始化,所以基本上都是運(yùn)行期。所以看到這里我們就更清楚了哇…神秘的面紗越來越薄了….試著看點(diǎn)原始的甚至難得東西未嘗不是一件好事…..
還有很多注解的屬性我們后來可以一一去分析他們,多行必有好處
到這里其實(shí)有疑問,@Documented我們知道這個會把標(biāo)識的注解加入到docs中。那么別的注解了。還沒有深入分析原理之前,我個人簡單理解是:我們?nèi)绻隽诉@種處理,在源碼階段,編譯后,運(yùn)行時jvm都會為我們的這些做處理,比如你什么了runtime是source,那么你的這個注解到了編譯階段直接被拋棄,后面運(yùn)行時你想通過某個手段,比如注解去獲取標(biāo)識了這種注解類型的注解,發(fā)現(xiàn)找不到。這就是java編譯器給我們做的處理。So,我們就暫時這樣理解吧!
下篇我們說下自定義注解吧吧吧~~~
鏈接記錄下(后面會經(jīng)常用到)
有一個鏈接來源也是來源轉(zhuǎn)載的,獲取侵權(quán),聯(lián)系我,baby!