Android-自定義注解-注解基礎(chǔ)-元注解

亂七八糟的準(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)常用到)

常用API文檔索引

How can we help?

android.annotation

有一個鏈接來源也是來源轉(zhuǎn)載的,獲取侵權(quán),聯(lián)系我,baby!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容