1 |
compile 'com.android.support:support-annotations:24.2.0' |
Nullness注解
使用@NonNull注解修饰的字段,方法参数,返回值, 都不可已为null。
@Nullable 表示可以为空
1 2 3 |
@Nullable public String notNull(@NonNull Fragment fragment){ return null; } |
资源类型注解
符合 @XXXRes 格式的注解, 限制传入的int值参数为对应类型的资源id;
1 2 3 4 |
//传入参数为 String.xml 对应的id public void getStringSrc(@StringRes int id){ //... } |
例:
- @AnimRes 动画文件夹里的资源的id
- @LayoutRes 布局资源的id
- @StringRes 字符串
IntDef和StringDef注解
限制int或string从特定的几个值内取值;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
public class IntDefDemo { public int status; public static final int Open = 0; public static final int Close = 1; //可能的值放在{}内, 使用IntDef注解 @IntDef({Open, Close}) public @interface StatusW { //接口内无其他值 } // 使用接口名限制传入参数 public void setSattus(@StatusW int newStatus){ status=newStatus; } @StatusW public int getStatus(){ return status; } } // 使用 IntDefDemo intDefDemo=new IntDefDemo(); intDefDemo.setSattus(IntDefDemo.Close); |
@Keep
keep修饰的元素在编译时不会因为没有被调用过而被删除;
1 2 3 4 5 6 |
@Keep String k; @Keep public void tKeep(){ } |
限制范围 @IntRange @@FloatRange
限制修饰的元素的取值范围;
1 2 3 4 5 6 |
@IntRange(from = 10,to = 100) int s; @IntRange(from = 10,to = 100) public int getIndex(){ return 10; } |
限制线程
修饰函数方法时限制该方法运行的线程, 修饰类时限制该类中所有的方法的运行线程
- @BinderThread 限制在Binder Thread
- AnyThread 任意线程
- MainThread 主线程
- UiThread ui线程
- WorkerThread 工作线程
Size
限制大小
1 2 3 |
public void getLocationInWindow(@Size(2) int[] location) { ... } |
指定权限 RequiresPermission
该内容的执行需要权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
//指定一个 @RequiresPermission(Manifest.permission.SET_WALLPAPER) public abstract void setWallpaper(Bitmap bitmap) throws IOException; @RequiresPermission(ACCESS_COARSE_LOCATION) public abstract Location getLastKnownLocation(String provider); // 多个权限, 有一个就满足 @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION}) public abstract Location getLastKnownLocation(String provider); // 需要列表中的全部权限 @RequiresPermission(allOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION}) public abstract Location getLastKnownLocation(String provider); // 一些特殊权限 @RequiresPermission.Read(@RequiresPermission(READ_HISTORY_BOOKMARKS)) @RequiresPermission.Write(@RequiresPermission(WRITE_HISTORY_BOOKMARKS)) public static final Uri BOOKMARKS_URI = Uri.parse("content://browser/bookmarks"); // 修饰参数, 表示需要这个参数顺利执行的权限 public void startActivity(@RequiresPermission Intent intent) { ... } // 修饰字段 @RequiresPermission(Manifest.permission.CALL_PHONE) public static final String ACTION_CALL = "android.intent.action.CALL"; |
RequiresApi
指定需要指定或更高的 API 级别
1 2 3 4 |
@RequiresApi(19) public void tag(){ } |
CallSuper
子类重写 CallSuper 修饰的方法时, 必须调用父类的方法(super.);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public class A { @CallSuper public void cs(){ } } public class B extends A { @Override public void cs() { super.cs();//必须调用父类的方法 } } |
0 Comments