主要使用 IntDef
和 StringDef
註解替代枚舉。android
例如:git
public static final int RED = 0x1;
public static final int GREEN = 0x2;
public static final int BLUE = 0x3;
@IntDef({RED, GREEN,BLUE})
@Retention(RetentionPolicy.SOURCE)
public @interface BgColor{}
private int color;
public void setColor(@BgColor int color) {
this.color = color;
}
@BgColor
public int getColor() {
return color;
}
複製代碼
註解標識 | 描述 |
---|---|
@Nullable | 標記參數或者返回值能夠爲空 |
@NonNull | 標記參數或者返回值不能夠爲空 |
注意:在使用的過程當中發如今最新版本的AndroidStudio中不添加@Nullable和@NonNull,編譯器也一樣會提示響應的警告,因此這個註解能夠忽略使用。github
註解標識 | 描述 |
---|---|
@AnimatorRes | 標記整形值爲android.R.animator類型(屬性動畫相關) |
@AnimRes | 標記整形值爲android.R.anim類型(補間動畫相關) |
@XmlRes | 標記整形值爲android.R.xml類型 |
@AnyRes | 任何資源類型 |
@ArrayRes | 數組資源類型 |
@AttrRes | 屬性資源類型 |
@BoolRes | bool類型資源類型 |
@ColorRes | 顏色資源類型 |
@DimenRes | 長度資源類型 |
@DrawableRes | 圖片資源類型 |
@IdRes | 資源id |
@InterpolatorRes | 動畫插值器 |
@LayoutRes | layout資源 |
@MenuRes | menu資源 |
@RawRes | raw資源 |
@StringRes | 字符串資源 |
@StyleRes | style資源 |
@StyleableRes | Styleable資源類型 |
@TransitionRes | transition資源類型 |
註解標識 | 描述 |
---|---|
@UiThread | UI線程 (對一個應用而言可能存在多個UI線程,每一個UI線程對應不一樣Activity的主窗口) |
@MainThread | 主線程 (一個應用只有一個主線程, 固然主線程也是UI線程) |
@WorkerThread | 子線程 |
@BinderThread | 綁定線程 |
註解標識 | 描述 |
---|---|
@Size | 定義長度大小,可選擇最小和最大長度使用 (min = 1, max = 100),主要用於對於相似數組、集合和字符串之類的參數 |
@IntRange | IntRange是用來指定int類型範圍的註解 |
@FloatRange | FloatRange和IntRange用法同樣,不過是指定的是float類型的數據對象 |
若是API容許調用者重寫某個函數,但同時要求重寫的函數須要調用被重寫的函數, 那麼可以使用 @CallSuper
註解。數組
@CallSuper
註解主要是用來強調在覆蓋父類方法時,須要實現父類的方法,及時調用對應的super.xxx方法,當用 @CallSuper
修飾了該方法,若是子類覆蓋後的方法沒有實現super方法會拋出異常。bash
若是函數須要調用者對返回值作某些處理,那麼可使用 @CheckResult
註解來提示開發者。咱們不必對每一個非空返回值的函數都添加這個註解,該註解的主要目的是讓調用者在使用API時,不至於懷疑該函數是否會產生反作用。ide
假設你定義了一個方法返回一個值,你指望調用者用這個值作些事情,那麼你可使用 @CheckResult
註解標註這個方法,強制用戶定義一個相應的返回值,使用它!函數
此外還能夠指定警告信息post
//若是調用者沒有檢查函數的返回值,Android Studio將會給出警告
//警告信息中包含suggest指定的內容
@CheckResult(suggest="#enforcePermission(String,int,int,String)")
@PackageManager.PermissionResult
public abstract int checkPermission(@NonNull String permission, int pid, int uid);
複製代碼
Android應用在使用某些系統功能時,須要在 AndroidManifest.xml
中聲明權限,不然在運行時會提示缺失對應的權限。爲了在編譯期及時發現缺失的權限,咱們可使用 @RequiresPermission
註解。單元測試
//代表調用該函數須要聲明一個權限
@RequiresPermission(Manifest.permission.CHANGE_NETWORK_STATE)
public void setDataEnable() {
..........
}
//代表調用該函數須要聲明集合中至少一個權限
@RequiresPermission(anyOf = {
Manifest.permission.CHANGE_NETWORK_STATE, Manifest.permission.INTERNET})
public void setDataEnable() {
.........
}
//代表調用該函數須要聲明集合中全部的權限
@RequiresPermission(allOf = {
Manifest.permission.CHANGE_NETWORK_STATE, Manifest.permission.INTERNET})
public void setDataEnable() {
.........
}
複製代碼
除了修飾函數外,該註解還能夠修飾Intent對應的ACTION字段或ContentProvider對應的Uri,例如:測試
@RequiresPermission(Manifest.permission.ACCESS_WIFI_STATE)
public static final String ACTION_TEST = "com.zj.test.Wifi";
//對於ContentProvider可能須要讀和寫這兩個操做,對應不一樣的權限聲明
@RequiresPermission.Read(@RequiresPermission("read_permission"))
@RequiresPermission.Write(@RequiresPermission("write_permission"))
public static final Uri TEST_URI = Uri.parse("content://test/info");
複製代碼
單元測試中,可能須要訪問到一些不可見的類、函數或變量,這時可使用@VisibleForTesting註解來使其對測試可見。
@Keep
註解用來標記在Proguard混淆過程當中不須要混淆的類或者方法,例如:
public class Test {
@Keep
public void test() {
..........
}
}
複製代碼
About Me