91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在Android中對SDK進行封裝時需要用到哪些注解

發布時間:2020-12-04 16:59:41 來源:億速云 閱讀:206 作者:Leah 欄目:移動開發

在Android中對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進行封裝時需要用到哪些注解

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

在Android中對SDK進行封裝時需要用到哪些注解

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

在Android中對SDK進行封裝時需要用到哪些注解

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

二、DrawableRes, StringRes 與 DimenRes

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

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

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

在Android中對SDK進行封裝時需要用到哪些注解

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

三、NonNull 與 Nullable

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

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

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

在Android中對SDK進行封裝時需要用到哪些注解

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

@Nullable
public Context getContext() {return null;}

在Android中對SDK進行封裝時需要用到哪些注解

關于在Android中對SDK進行封裝時需要用到哪些注解問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜章县| 肃北| 漠河县| 苏尼特右旗| 昌都县| 额敏县| 虹口区| 衢州市| 神池县| 东丰县| 武川县| 莫力| 昆明市| 巫山县| 淮滨县| 庆云县| 化德县| 砚山县| 丰县| 凭祥市| 公主岭市| 昭觉县| 连云港市| 潮州市| 崇信县| 宝山区| 孝昌县| 萨嘎县| 精河县| 喀喇| 枣强县| 慈溪市| 安远县| 冷水江市| 江口县| 石首市| 临桂县| 上虞市| 北票市| 木里| 桑植县|