国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android中封裝SDK時常用的注解總結

2019-10-23 18:29:34
字體:
來源:轉載
供稿:網友

前言

在工作中我們經常需要將功能模塊封裝成庫供合作廠商調用, 如何寫好一個健壯的Android Library有很多講究,使用注解可以對SDK暴露給開發者的接口做出一些限制,從而盡可能地避免開發者錯誤地使用API。 下面我們介紹幾種封裝SDK時常用到的注解,需要的朋友們可以參考學習。

一、IntDef與StringDef

我們有時候會使用int常量或者String常量來代替枚舉, 特別在你編寫SDK的時候,你可以通過IntDef或者StringDef來限制接口可接受的參數。

比如,有一個 disableChannel的接口,用來關閉指定的channel 。 我們可以先定義自己的注解@RequirePayChannel

public static final int CHANNEL_UNIONPAY = 0x11000;public static final int CHANNEL_ALIPAY = 0x12000;public static final int CHANNEL_WECHAT = 0x13000;@Retention(RetentionPolicy.SOURCE)@IntDef({CHANNEL_UNIONPAY,CHANNEL_ALIPAY,CHANNEL_WECHAT})public @interface RequirePayChannel {}

這樣,你便可以通過@RequirePayChannel來指定disableChannel()的可接受參數

public void enableChannel(@RequirePayChannel int channel) { // do something}

這樣,一些IDE還會自動提供給你建議參數。如果填入指點范圍之外的參數,將會出現錯誤提示并無法編譯通過。

android,封裝sdk,注解,android封裝sdk包

值得一說的是, 在這里,我們使用到了@Retention(RetentionPolicy.SOURCE) 。 它指定了編譯器在處理Animation時候的處理方法。 默認編譯器會將常量替換成對應的數值,如果沒指定該注解,你編譯完成后將得到這樣的class文件:

android,封裝sdk,注解,android封裝sdk包

這樣會導致IDE不能提示到有意義的信息。并且一定要指定為特定的int數值,否則也無法編譯通過。

android,封裝sdk,注解,android封裝sdk包

所以,應該指定Retention讓編譯器不對該注解做額外的優化處理。

二、DrawableRes, StringRes 與 DimenRes

當我們在編寫指定資源文件的接口時,可以通過資源注解來指定該方法接受的資源類型。 指定錯誤的資源將不能編譯通過。 下面代碼中,我們使用@DrawableRes來表明setLogo方法只支持Drawable資源的ID。

public void setLogo(@DrawableRes int resurceId) { // do something}

當我們提供錯誤的資源,IDE將會報錯。

android,封裝sdk,注解,android封裝sdk包

@StringRes @DimenRes 的使用方法也類似。

三、NonNull 與 Nullable

將一個空值傳入一個方法中可能引發潛在的Crash。 我們應該極力避免這種情況, @NonNull 可以指定參數是否接受空值,當我們傳入一個空值的時候,IDE會給出響應的警告。 我們可以這樣使用它:

public void setContext(@NonNull Context context) { // do something}

當我們對其傳入一個空值的時候,將會顯示警告(但代碼仍然能通過編譯)

android,封裝sdk,注解,android封裝sdk包

@Nullable 用于修飾參數或者方法的返回值可能為空,提醒開發者主要空值檢查。

@Nullablepublic Context getContext() {return null;}

android,封裝sdk,注解,android封裝sdk包

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。

 

注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 互助| 敦化市| 水富县| 深州市| 罗城| 郑州市| 太保市| 井冈山市| SHOW| 嘉义县| 墨竹工卡县| 丰台区| 犍为县| 高州市| 柳州市| 江孜县| 大理市| 洛宁县| 怀远县| 屏东市| 鄄城县| 宿迁市| 革吉县| 江华| 龙口市| 江北区| 保定市| 永泰县| 宁强县| 武定县| 昆明市| 江安县| 象州县| 灵川县| 辽中县| 台南县| 莫力| 金溪县| 武安市| 栾城县| 衢州市|