[譯]使用Android Support Annotations優(yōu)化你的代碼

@author ASCE1885的 Github 簡書 微博 CSDN
原文鏈接

如果你還沒有聽說過Android Support Annotations 函數(shù)庫,你將錯過一個整潔的新軟件包,它有助于你捕獲程序中的bugs。該函數(shù)庫包含了許多的Java注解,用于幫助Android Studio檢測代碼中可能存在的錯誤,并報告給開發(fā)者。注解類型有很多種,本文將只介紹其中幾種,請一定要自己閱讀文檔以了解本文未介紹的其他注解類型。

@NONNULL / @NULLABLE

@NonNull和@Nullable可能是support annotations最基礎(chǔ)的也是最有用的注解之一了。使用這兩個注解修飾的函數(shù)參數(shù)或者函數(shù),表示參數(shù)或者函數(shù)返回值是否可以為空,之后Android Studio在代碼可能出現(xiàn)不安全的情況下會給出智能提示。

使用注解前后對比如下:

未使用注解:

使用@NonNull注解:

更進(jìn)一步,我們可以使用@CheckResult注解來讓使用者知道該函數(shù)的返回值是需要使用的,沒有使用函數(shù)的返回值則Android Studio會給出警告提示:

@STRINGRES / @DRAWABLERES等

你是否遇到過嘗試調(diào)用TextView的setText函數(shù),結(jié)果出現(xiàn)如下異常:

android.content.res.Resources$NotFoundException: String resource ID #0x3039

當(dāng)你給setText函數(shù)傳入一個整型值,TextView將它作為一個String資源id對待,并會進(jìn)行查找以便設(shè)置這個字符串。如果存在一個可以標(biāo)識整型值是非法ids的注解就好了,@StringRes正是用來實(shí)現(xiàn)這個功能的!

public void setText(@StringRes int id) {
  // Do something like getString(id), etc.
}

現(xiàn)在如果你試圖傳遞一個非字符串的資源id給這個函數(shù),你將得到如下提示:

所有的資源類型都存在類似的注解,例如@DrawableRes, @ColorRes, @InterpolatorRes等等。

@KEEP

最近我發(fā)現(xiàn)一個新的support annotation注解@Keep。根據(jù)support annotations文檔說明,這個注解還沒有被關(guān)聯(lián)到Gradle插件中,被這個注解修飾的函數(shù)或者類,在代碼混淆進(jìn)行壓縮時會被保持住。

如果你曾經(jīng)在使用Proguard時使用過

-keep class com.foo.bar { public static <methods> }

你會知道當(dāng)嘗試把某個特定的函數(shù)或者類從優(yōu)化操作中排除掉是多么痛苦的事情。使用這個注解將會告訴Proguard不要對指定的函數(shù)或者類進(jìn)行優(yōu)化操作:

public class Example {
  @Keep
  public void doSomething() {
      // hopefully this method does something
  }
  ...
}

好消息是,如果你已經(jīng)使用了appcompat-v7,那么support-annotations已經(jīng)被包含在里面了,可以立刻開始使用它了。

歡迎關(guān)注我的微信公眾號

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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