使用 Annotation 改善 Android 代碼

簡評:作為一名開發者,沒有人不想寫出高質量的代碼,善用註解就能幫我們大大改善代碼質量。

Annotation(註解)是用於提供有關其他數據信息的,這裡我們討論如何用 annotation 改善我們的 Android 代碼。

Android 官方已經支持了 annotation,可以用下面的方式來集成:

compile com.android.support:support-annotations:x.x.x

下面介紹一些最常用的 annotation:

@Nullable 和 @NonNull,用來檢查給定的變數、參數或返回值是否能夠為空。

  • @Nullable,表示變數、參數或返回值可以為 null。
  • @NonNull,表示變數、參數或返回值不能為 null。

例如:

@NonNullpublic View getView(@Nullable String s1, @NonNull String s2) { // s1 can be null // s2 should not be null // it must return non null view}

當你這樣調用時:

View view = getView("Amit", null);

Android Studio 會警告你 s2 不應為空。

資源相關註解

肯定都知道在 Android 中的資源文件都是使用 Integer 類型值作為 resId,因為所有的資源 ID 都是 Integer 類型,所以這時可以用註解來聲明要傳入的是什麼資源類型。

例如:

public void setText(@StringRes int resId) { // resId must be string resources // resId should not be a normal int}

當你直接傳入一個普通數字時:

textView.setText(56);

Android Studio 就會警告沒有傳入 R.string 引用。

線程註解

線程註解用於檢查指定方法是否是在指定線程中被調用的。

目前支持的有:

  • @MainThread
  • @UiThread
  • @WorkerThread
  • @BinderThread
  • @AnyThread

用法就是直接在特定方法上聲明即可。

數值限制類註解

有些時候,我們需要對參數做一些限制約束,這時可以使用 @IntRange, @FloatRange 和 @Size 來校驗參數。

比如在下面的例子中,我們用到 @IntRange 來確保傳入的整數值在 0 至 255 之間。

public void setAlpha(@IntRange(from=0,to=255) int alpha) {}

許可權註解

@RequestPermission 註解能檢查方法調用者是否有某些許可權,但只局限於檢查 manifest 中是否聲明了許可權,不適用與 Android M 之後的動態許可權。

@RequiresPermission(Manifest.permission.SET_WALLPAPER)public abstract void setWallpaper(Bitmap bitmap) throws IOException;

當 manifest 中沒有寫 SET_WALLPAPER 許可權時,就會顯示警告。

更多關於 Android annotation 的知識,大家感興趣的可以去官網進一步學習:

developer.android.com/s

原文:Improve Your Android Coding Through Annotations

擴展閱讀:

  • Android 中使用持續集成 - 知乎專欄

  • 換一個角度思考如何給日誌分級 - 知乎專欄

歡迎關註:知乎專欄「極光日報」,每天為 Makers 導讀三篇優質英文文章。


推薦閱讀:

重載Finalize引發的內存泄露
Google 新推出的 Allo 聊天應用,可能要佔領全宇宙了
從0開始學習 GitHub 系列之「Git 速成」
能夠買到的話,你選擇魅藍metal,樂1s,榮耀5x這其中的哪個,或者同價位你會選擇哪個??
鎚子手機的整容臉和羅永浩的自我救贖:M1系列會被市場認可嗎?

TAG:Android | Android开发 | 编程 |