【Android】 注解是個好東西,這個可以有

對于Android開發(fā)來說吃环,注解可是個好東西也颤,但是利用的不多,我研究過國內(nèi)不少SDK郁轻,發(fā)現(xiàn)很少有使用注解的翅娶,至于App的開發(fā)團(tuán)隊的使用情況不太清楚文留,但是就我接觸的而言,使用的也不多竭沫。之前接觸過國外的一些SDK燥翅,比如facebook相關(guān)的一些SDK,你查看一下源碼蜕提,就會發(fā)現(xiàn)森书,注解是一個很普遍的存在。

注解庫

如果你使用了com.android.support:appcompat-v7庫不需要添加額外的依賴贯溅。
但是如果你沒有使用這個庫,也可以額外單獨添加注解庫躲查。compile 'com.android.support:support-annotations:xx.xx.xx'它浅。

Nullable NonNull

下面舉個例子:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        test1(null);
        test2(null);
    }
    private void test1(@NonNull String str){
        Log.e(this.getClass().getName(),str);
    }
    private void test2(@Nullable String str){
        if (str!=null){
            Log.e(this.getClass().getName(),str);
        }
    }
}

將上面代碼放到IDE中,顯示效果如下:

Paste_Image.png

我們可以看到test1傳入的參數(shù)被加重標(biāo)識出來镣煮,如果將鼠標(biāo)放到上面會有如下顯示:

這樣姐霍,我們可以輕易發(fā)現(xiàn)錯誤,避免空指針的crash發(fā)生典唇,養(yǎng)成在每個方法中加注解的習(xí)慣镊折,增強(qiáng)代碼的嚴(yán)謹(jǐn)性。

資源類型的注解

資源類型的注解介衔,有以下幾種:

  • @StringRes
  • @ColorRes
  • @AnimationRes
  • @DimensionRes
  • @DimensionPixelOffsetRes
  • @DimensionPixelSizeRes
  • @BooleanRes
  • @ColorStateListRes
  • @DrawableRes
  • @IntArrayRes
  • @IntegerRes
  • @LayoutRes
  • @MovieRes
  • @TextRes
  • @TextArrayRes
  • @StringArrayRes

這些注解在用法上都是一樣的恨胚,只是標(biāo)識的類型不一樣(不一一介紹了,通過名字就能看出來)炎咖,下面看一下用法:

 private void setText1(@StringRes int id){

    }
    private void setText2( int id){

    }

上面連個方法一個是帶資源注解的赃泡,一個是不帶的,我們在IDE中調(diào)用一下乘盼,看有什么區(qū)別:


從上圖中可以看出升熊,加了資源注解的方法,如果傳入的資源是錯的類型绸栅,就會報錯级野,這樣更容易發(fā)現(xiàn)程序中的bug。

IntDef StringDef

IntDef StringDef可以限制傳入?yún)?shù)的內(nèi)容粹胯,這在一些固定參數(shù)的方法中尤為重要蓖柔,比如網(wǎng)絡(luò)的get post方法:
比如:

 private static final int INTGET = 0;
    private static final int INTPOST = 1;
    private static final String STRGET = "get";
    private static final String STRPOST = "post";

然后使用IntDef StringDef定義注解接口

 @IntDef({INTGET, INTPOST})
    public @interface HttpMethod {
    }
    @StringDef({STRGET, STRPOST})
    public @interface MethodName {
    }

    public void setMethod(@HttpMethod int httpmethod) {

    }
    public void setMethod(@MethodName String httpmethod) {

    }

這時偶們再調(diào)用setMethod方法,會有如下效果:


傳入的參數(shù)风纠,只能是之前定義的那幾個渊抽,如果是任意輸入的都會提示報錯。

權(quán)限注解

對于有些方法可能需要系統(tǒng)的一些權(quán)限议忽,但是我們會忘了在Manifest中加入這些權(quán)限懒闷,導(dǎo)致程序報錯。這時我們就可以使用權(quán)限注解:

 @RequiresPermission(Manifest.permission.INTERNET)
    private void getDataFromNet(){

    }

這時,如果沒有這個權(quán)限愤估,然后去調(diào)用這個方法:

強(qiáng)制super

比如我們寫一個基類:

public class Base {
    @CallSuper
    public void test(){
        Log.e("","");
    }
}

這時如果我們寫一個類帮辟,繼承這個類,如果不去super父類的方法就會這樣:

@keep

一看到這個詞肯定第一反應(yīng)就是跟混淆相關(guān)的玩焰,沒錯由驹,這個就是標(biāo)識該方法被keep出來,當(dāng)然你也可以在混淆文件中keep昔园,混淆文件的規(guī)則可以參考Android混淆機(jī)制

總結(jié)

基本的注解就總結(jié)到這里蔓榄,使用注解,養(yǎng)成一個良好的代碼習(xí)慣默刚,可以使代碼更加嚴(yán)謹(jǐn)甥郑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市荤西,隨后出現(xiàn)的幾起案子澜搅,更是在濱河造成了極大的恐慌,老刑警劉巖邪锌,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勉躺,死亡現(xiàn)場離奇詭異,居然都是意外死亡觅丰,警方通過查閱死者的電腦和手機(jī)饵溅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妇萄,“玉大人概说,你說我怎么就攤上這事∠ィ” “怎么了糖赔?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長轩端。 經(jīng)常有香客問我放典,道長,這世上最難降的妖魔是什么基茵? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任奋构,我火速辦了婚禮,結(jié)果婚禮上拱层,老公的妹妹穿的比我還像新娘弥臼。我一直安慰自己,他們只是感情好根灯,可當(dāng)我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布径缅。 她就那樣靜靜地躺著掺栅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纳猪。 梳的紋絲不亂的頭發(fā)上氧卧,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機(jī)與錄音氏堤,去河邊找鬼沙绝。 笑死,一個胖子當(dāng)著我的面吹牛鼠锈,可吹牛的內(nèi)容都是我干的闪檬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼购笆,長吁一口氣:“原來是場噩夢啊……” “哼粗悯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起由桌,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤为黎,失蹤者是張志新(化名)和其女友劉穎邮丰,沒想到半個月后行您,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡剪廉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年娃循,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斗蒋。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡捌斧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出泉沾,到底是詐尸還是另有隱情捞蚂,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布跷究,位于F島的核電站姓迅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏俊马。R本人自食惡果不足惜丁存,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望柴我。 院中可真熱鬧解寝,春花似錦、人聲如沸艘儒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嘉抓,卻和暖如春索守,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背抑片。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工卵佛, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人敞斋。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓截汪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親植捎。 傳聞我的和親對象是個殘疾皇子衙解,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,060評論 2 355

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