知其然跪求知其所以然,今天我們講一下注解開發(fā)-如何實(shí)現(xiàn)一個low版本的事件總線胆屿。
現(xiàn)在androd開發(fā)會用框架可以說是最基本的入門了旁壮。比如Retrofit2,EventBus侈贷,路由框架ARouter等惩歉,是不是想學(xué)習(xí)追一下源碼發(fā)現(xiàn)看不懂了?哈哈俏蛮,因?yàn)闆]看懂注解啊...
java 1.5開始引入了注解和反射撑蚌,正確的來說注解是反射的一部分,沒有反射搏屑,注解無法正常使用争涌,但離開注解,反射依舊可以使用辣恋,因此來說亮垫,反射的定義應(yīng)該包含注解才合理一些。
我們學(xué)了注解能干點(diǎn)啥伟骨?其實(shí)學(xué)會了注解開發(fā)饮潦,第一可以解決一些開發(fā)問題,第二呢可以裝XX携狭,裝XX,裝XX
(重要的事情說三遍)继蜡。
按照來源可以分為JDK的,三方的(我們常用的框架)逛腿,自己寫的自定義注解(我們要學(xué)的)
注解按照運(yùn)行機(jī)制分呢 稀并,可以分為 源碼注解,編譯時期注解(ARouter)单默,運(yùn)行時期注解(EventBus)稻轨。
源碼注解就在源碼存在,編譯成class文件就木了雕凹,編譯時期的注解源碼和運(yùn)行的時候都存在不消失,運(yùn)行時注解可以發(fā)揮作用政冻,甚至可以控制邏輯枚抵,比如我們的事件總線。
Java給我們帶了哪些注解呢明场?
最常見的幾個
@Override
這個最常見汽摹,覆蓋父類方法就會提示這個
@Deprecated
過時注解
@SuppressWarnings("xxx")
壓制警告作用
我們發(fā)現(xiàn)上面提示我們方法已經(jīng)過期了,看著不爽咋辦苦锨,壓制它1破E棵凇!
感謝分享嗜憔,相關(guān)鏈接可以點(diǎn)擊
https://www.cnblogs.com/fsjohnhuang/p/4040785.html
這是我們在寫代碼時候常見的,但是和我們想的自定義注解好像沒啥關(guān)系氏仗,下面開啟學(xué)習(xí)自定義之路
想自定義注解吉捶,我們先學(xué)習(xí)下源注解
源注解是啥子?xùn)|東?
這玩意其實(shí)就是為了編寫自定義注解而生的(哈哈)
先講下源注解有哪些
@Target 表示該注解可以用于什么地方皆尔,可以共存
可能的ElementType參數(shù)有:
CONSTRUCTOR:構(gòu)造器的聲明
FIELD:域聲明(包括enum實(shí)例)
LOCAL_VARIABLE:局部變量聲明
METHOD:方法聲明
PACKAGE:包聲明
PARAMETER:參數(shù)聲明
TYPE:類呐舔、接口(包括注解類型)或enum聲明
@Retention 表示需要在什么級別保存該注解信息。
可選的RetentionPolicy參數(shù)包括:
SOURCE:注解將被編譯器丟棄
CLASS:注解在class文件中可用慷蠕,但會被VM丟棄
RUNTIME:VM將在運(yùn)行期間保留注解珊拼,因此可以通過反射機(jī)制讀取注解的信息。
@Document 常用于文檔編寫
將注解包含在Javadoc中
@Inherited 只能繼承類上(@interface的繼承不了)的注解流炕,方法注解繼承不到哦
允許子類繼承父類中的注解
接下來我們寫一個自定義注解展示一下
為了裝XX澎现,我們模仿下EventBus
我們使用@interface表示這是一個注解,里面參數(shù)的類型有哪些呢浪感?
原始基本類型昔头,String,Class,Annotation(注解),Enumeration(枚舉) 其實(shí)我們一般也就常用基本類型和字符串就最夠用了影兽,像List,Map這種就會報錯的
我們編寫好了揭斧,在頁面里使用一下,可以用了
我們該怎么使用注解呢峻堰?其實(shí)我們需要拿到注解方法上面的參數(shù)讹开,才能進(jìn)行下一步,
第一步我們先拿到當(dāng)前類捐名,遍歷類里的方法旦万,查找上面是否有我們的注解
運(yùn)行一下試試卓起,我們獲取到了注解的參數(shù)值嘱兼,是不是瞬間覺得美滋滋了
我們是不是要裝個XX,開啟我們的EventBus編碼之旅哆档?當(dāng)然正經(jīng)EventBus有黏性發(fā)送贺归,異步運(yùn)行啥的淆两,我們先就先玩?zhèn)€LOW版本的,發(fā)送消息能接收就行
注解開發(fā)-自定義EventBus之路02鏈接
http://www.reibang.com/p/cb75cb815e53