欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android中封裝SDK時常用的注解總結(jié)

 更新時間:2017年05月04日 09:42:26   作者:Xie Zefan  
這篇文章主要給大家總結(jié)了在Android中封裝SDK時常用的注解的相關(guān)資料,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。

前言

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

一、IntDef與StringDef

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

比如,有一個 disableChannel的接口,用來關(guān)閉指定的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()的可接受參數(shù)

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

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


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


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


所以,應(yīng)該指定Retention讓編譯器不對該注解做額外的優(yōu)化處理。

二、DrawableRes, StringRes 與 DimenRes

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

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

當(dāng)我們提供錯誤的資源,IDE將會報錯。


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

三、NonNull 與 Nullable

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

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

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

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

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

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Android音頻焦點(diǎn)管理實(shí)例詳解

    Android音頻焦點(diǎn)管理實(shí)例詳解

    音頻是個專業(yè)術(shù)語,音頻一詞已用作一般性描述音頻范圍內(nèi)和聲音有關(guān)的設(shè)備及其作用,人類能夠聽到的所有聲音都稱之為音頻,它可能包括噪音等,下面這篇文章主要給大家介紹了關(guān)于Android音頻焦點(diǎn)管理的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • Android?WebView預(yù)渲染介紹

    Android?WebView預(yù)渲染介紹

    這篇文章主要介紹了Android?WebView預(yù)渲染介紹,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • android判斷軟件是否第一次運(yùn)行的方法

    android判斷軟件是否第一次運(yùn)行的方法

    這篇文章主要介紹了android判斷軟件是否第一次運(yùn)行的方法,涉及針對Android中isFirstRun屬性的判斷,需要的朋友可以參考下
    2015-04-04
  • 微信支付僅能成功調(diào)用一次問題的解決方法(Android)

    微信支付僅能成功調(diào)用一次問題的解決方法(Android)

    這篇文章主要介紹了微信支付僅能成功調(diào)用一次問題的解決方法,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Android實(shí)現(xiàn)文件存儲并讀取的示例代碼

    Android實(shí)現(xiàn)文件存儲并讀取的示例代碼

    本篇文章主要介紹了Android實(shí)現(xiàn)文件存儲的示例代碼,文件內(nèi)容可以分別存儲在手機(jī)內(nèi)存和外存中,并且都可以讀去取出來,有興趣的可以了解一下。
    2017-01-01
  • Android性能優(yōu)化之利用Rxlifecycle解決RxJava內(nèi)存泄漏詳解

    Android性能優(yōu)化之利用Rxlifecycle解決RxJava內(nèi)存泄漏詳解

    RxJava作為一種響應(yīng)式編程框架,是目前編程界網(wǎng)紅,可謂是家喻戶曉,其簡潔的編碼風(fēng)格、易用易讀的鏈?zhǔn)椒椒ㄕ{(diào)用、強(qiáng)大的異步支持等使得RxJava被廣泛使用。
    2017-01-01
  • Android6.0 Launcher2應(yīng)用解析

    Android6.0 Launcher2應(yīng)用解析

    這篇文章主要為大家詳細(xì)介紹了Android6.0 Launcher2應(yīng)用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Flutter?異步編程之單線程下異步模型圖文示例詳解

    Flutter?異步編程之單線程下異步模型圖文示例詳解

    這篇文章主要為大家介紹了Flutter?異步編程之單線程下異步模型圖文示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • android實(shí)現(xiàn)簡單的活動轉(zhuǎn)盤

    android實(shí)現(xiàn)簡單的活動轉(zhuǎn)盤

    這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)簡單的活動轉(zhuǎn)盤,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Android編程輸入事件流程詳解

    Android編程輸入事件流程詳解

    這篇文章主要介紹了Android編程輸入事件流程,較為詳細(xì)的分析了Android輸入事件原理、相關(guān)概念與具體操作流程,需要的朋友可以參考下
    2016-10-10

最新評論