最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

一、IntDef與StringDef

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

比如,有一個(gè) disableChannel的接口,用來(lái)關(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 {}

這樣,你便可以通過(guò)@RequirePayChannel來(lái)指定disableChannel()的可接受參數(shù)

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

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


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


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


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

二、DrawableRes, StringRes 與 DimenRes

當(dāng)我們?cè)诰帉?xiě)指定資源文件的接口時(shí),可以通過(guò)資源注解來(lái)指定該方法接受的資源類型。 指定錯(cuò)誤的資源將不能編譯通過(guò)。 下面代碼中,我們使用@DrawableRes來(lái)表明setLogo方法只支持Drawable資源的ID。

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

當(dāng)我們提供錯(cuò)誤的資源,IDE將會(huì)報(bào)錯(cuò)。


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

三、NonNull 與 Nullable

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

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

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

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

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

總結(jié)

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

相關(guān)文章

  • ViewPager+PagerAdapter實(shí)現(xiàn)帶指示器的引導(dǎo)頁(yè)

    ViewPager+PagerAdapter實(shí)現(xiàn)帶指示器的引導(dǎo)頁(yè)

    這篇文章主要為大家詳細(xì)介紹了ViewPager+PagerAdapter實(shí)現(xiàn)帶指示器的引導(dǎo)頁(yè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • 初學(xué)Android之網(wǎng)絡(luò)封裝實(shí)例

    初學(xué)Android之網(wǎng)絡(luò)封裝實(shí)例

    大家好,本篇文章主要講的是初學(xué)Android之網(wǎng)絡(luò)封裝實(shí)例,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Android對(duì)圖片Drawable實(shí)現(xiàn)變色示例代碼

    Android對(duì)圖片Drawable實(shí)現(xiàn)變色示例代碼

    這篇文章主要給大家介紹了關(guān)于Android對(duì)圖片Drawable實(shí)現(xiàn)變色的相關(guān)資料,文中通過(guò)示例代碼將實(shí)現(xiàn)的方法介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-08-08
  • Android 開(kāi)發(fā)之旅:詳解view的幾種布局方式及實(shí)踐

    Android 開(kāi)發(fā)之旅:詳解view的幾種布局方式及實(shí)踐

    這篇文章主要介紹了Android 開(kāi)發(fā)之旅:詳解view的幾種布局方式及實(shí)踐,具有一定的參考價(jià)值,有需要的可以了解一下。
    2016-12-12
  • 基于Android中手勢(shì)交互的實(shí)現(xiàn)方法

    基于Android中手勢(shì)交互的實(shí)現(xiàn)方法

    本篇文章是對(duì)Android中手勢(shì)交互的實(shí)現(xiàn)進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下
    2013-05-05
  • Android編程實(shí)現(xiàn)可滑動(dòng)的開(kāi)關(guān)效果(附demo源碼下載)

    Android編程實(shí)現(xiàn)可滑動(dòng)的開(kāi)關(guān)效果(附demo源碼下載)

    這篇文章主要介紹了Android編程實(shí)現(xiàn)可滑動(dòng)的開(kāi)關(guān)效果,涉及Android的布局與控件設(shè)置技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下
    2016-04-04
  • Android開(kāi)發(fā)之如何自定義數(shù)字鍵盤詳解

    Android開(kāi)發(fā)之如何自定義數(shù)字鍵盤詳解

    這篇文章主要給大家介紹了關(guān)于Android開(kāi)發(fā)之如何自定義數(shù)字鍵盤的相關(guān)資料,本文語(yǔ)言是基于kotlin實(shí)現(xiàn)的,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-09-09
  • 淺析Flutter AbsorbPointer 與 IgnorePointer的區(qū)別

    淺析Flutter AbsorbPointer 與 IgnorePointer的區(qū)別

    Flutter是Google一個(gè)新的用于構(gòu)建跨平臺(tái)的手機(jī)App的SDK。這篇文章主要介紹了Flutter AbsorbPointer 與 IgnorePointer的區(qū)別,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Kotlin協(xié)程flowOn與線程切換超詳細(xì)示例介紹

    Kotlin協(xié)程flowOn與線程切換超詳細(xì)示例介紹

    這篇文章主要介紹了Kotlin協(xié)程flowOn與線程切換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09
  • Andriod?Studio實(shí)現(xiàn)撥打電話和發(fā)送短信的示例代碼

    Andriod?Studio實(shí)現(xiàn)撥打電話和發(fā)送短信的示例代碼

    這篇文章主要介紹了Andriod?Studio實(shí)現(xiàn)撥打電話和發(fā)送短信功能,Android?Studio中創(chuàng)建項(xiàng)目,然后在該項(xiàng)目中創(chuàng)建一個(gè)Module名稱為“IntentDial”,文章結(jié)合實(shí)例步驟給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-03-03

最新評(píng)論

蒙阴县| 喀什市| 海晏县| 开封市| 巴南区| 玉屏| 页游| 镇宁| 临猗县| 石泉县| 阳新县| 保德县| 古蔺县| 九台市| 基隆市| 当阳市| 盐亭县| 大名县| 长沙市| 维西| 班玛县| 嵊州市| 确山县| 什邡市| 玉树县| 清苑县| 阿荣旗| 赣州市| 宿州市| 吉安县| 慈溪市| 怀远县| 郯城县| 济南市| 衡南县| 平和县| 南和县| 湘西| 昌宁县| 大竹县| 深州市|