JAVA註解

夫夷以近,則遊者衆;險以遠,則至者少。而世之奇偉、瑰怪,非常之觀,常在於險遠,而人之所罕至焉,故非有志者不能至也。

秒懂,Java 註解 (Annotation)你可以這樣學

看註解之前,你可能還需要了解一下JAVA的反射機制
Java中的反射機制介紹
Java高級特性——反射
總結:
如果註解難於理解,你就把它類同於標籤,標籤爲了解釋事物,註解爲了解釋代碼。
註解的基本語法,創建如同接口,但是多了個 @ 符號。
註解的元註解。
註解的屬性。
註解主要給編譯器及工具類型的軟件用的。
註解的提取需要藉助於 Java 的反射技術,反射比較慢,所以註解使用時也需要謹慎計較時間成本。

看完了這些之後,我就去看了一下Litepal和黃油刀的源碼
在這裏插入圖片描述
在這裏插入圖片描述
圖一是Litepal,圖二黃油刀。好像都是運行時註解啊

對比運行時和編譯時註解
在很多情況下,運行時註解和編譯時註解可以實現相同的功能,比如依賴注入框架,我們既可以在運行時通過反射來初始化控件,也可以再編譯時就生成控件初始化代碼。那麼,這兩者有什麼區別呢?
答:編譯時註解性能比運行時註解好,運行時註解需要使用到反射技術,對程序的性能有一定影響,而編譯時註解直接生成了源代碼,運行過程中直接執行代碼,沒有反射這個過程。
很多框架的實現都是用到了編譯時註解,如ButterKnife、EventBus、Dagger2等等。

其中,第一位兄弟說的
當開發者使用了Annotation 修飾了類、方法、Field 等成員之後,這些 Annotation 不會自己生效,必須由開發者提供相應的代碼來提取並處理 Annotation 信息。這些處理提取和處理 Annotation 的代碼統稱爲 APT(Annotation Processing Tool)。
現在,我們可以給自己答案了,註解有什麼用?給誰用?給 編譯器或者 APT 用的。

腦殼疼,又涉及到Apt了。

另一位大兄弟說
運行時註解與編譯時註解的區別是什麼呢?

a)保留階段不同。運行時註解保留到運行時,可在運行時訪問。而編譯時註解保留到編譯時,運行時無法訪問。

b)原理不同。運行時註解是Java反射機制,而編譯時註解通過APT、AbstractProcessor。

c)性能不同。運行時註解由於使用Java反射,因此對性能上有影響。編譯時註解對性能沒影響。這也是爲什麼ButterKnife從運行時切換到了編譯時的原因。

d)產物不同。運行時註解只需自定義註解處理器即可,不會產生其他文件。而編譯時註解通常會產生新的Java源文件。

意思是,通過apt提取註解的都是編譯時註解?和樓上的大兄弟衝突啊。我也不想看了。腦殼疼,疼疼疼。回頭再說吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章