简评:作为一名开发者,没有人不想写出高质量的代码,善用注解就能帮我们大大改善代码质量。
Annotation(注解)是用于提供有关其他数据信息的,这里我们讨论如何用 annotation 改善我们的 Android 代码。
Android 官方已经支持了 annotation,可以用下面的方式来集成:
compile ‘com.android.support:support-annotations:x.x.x’
下面介绍一些最常用的 annotation:
@Nullable 和 @NonNull,用来检查给定的变量、参数或返回值是否能够为空。
- @Nullable,表示变量、参数或返回值可以为 null。
- @NonNull,表示变量、参数或返回值不能为 null。
例如:
@NonNull
public 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 的知识,大家感兴趣的可以去官网进一步学习:annotations
原文:Improve Your Android Coding Through Annotations
扩展阅读: