主要使用 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