本文主要整理自https://blog.mindorks.com/improve-your-android-coding-through-annotations-26b3273c137a
Android中使用Annotation不仅可以提高代码的可读性,还有很多其他的功能。下面介绍几个常用的Annotation
1. @Nullable和@NonNull
这两个是最常见的Annotation,用于检查变量、参数或者返回值是否可以为空。
@NonNull
public View getView(@Nullable String s1, @NonNull String s2) {
// s1 可以为 null
// s2 不可以为 null
// 方法必须返回一个非null 的View
}
2. 资源注解
我们知道Android中资源id都是int值,如果有些参数是资源id,如果只是设置为int类型则容易造成误用,这时可以使用资源注解:
public void setText(@StringRes int resId) {
// resId必须是一个string id,而不可以是普通的int值,或者其他类型的资源id
}
3. 线程注解
线程注解可以检测方法的调用者是否是某一个特定的线程,目前支持的注解包括:
@MainThread
@UiThread
@WorkerThread
@BinderThread
@AnyThread
@WorkerThread
public void doSomething(){
// this method must be called from the worker thread
}
4. 值域注解
有时方法的参数会限定在一定的范围,可以使用值域注解:@Size, @IntRange, @FloatRange
,
public void setAlpha(@IntRange(from=0,to=255) int alpha) {}
5. 权限注解
使用@RequiresPermission
验证方法的调用者是否已经申请权限:
@RequiresPermission(Manifest.permission.SET_WALLPAPER)
public abstract void setWallpaper(Bitmap bitmap) throws IOException;
如果方法的调用这没有在manifest中申请SET_WALLPAPER
,则会显示警告。
6. Typedef注解
除了资源类型,int有时可以类似枚举类型,如下例子:
private final static int GET=0;
private final static int POST=1;
private final static int DELETE=2;
private final static int PUT=3;
@IntDef({GET, POST, DELETE,PUT})
@Retention(RetentionPolicy.SOURCE)
public @interface ReqType{}
使用@IntDef
可以限制方法的调用方使用特定的参数。