Nullness注解
名称 | 参数 | Target | 含义 |
---|---|---|---|
@Nullable | - | PARAMETER | 可以为null |
@NonNull | - | PARAMETER | 不可为null |
资源注解
资源注解的Target都是PARAMETER
名称 | 参数 | 含义 |
---|---|---|
@AniamtorRes | - | R.ainimaor |
@AnimRes | - | R.ainim |
@AnyRes | - | 任意资源类型 |
@AttrRes | - | R.arry |
@BoolRes | - | 布尔型 |
@ColorRes | - | R.color |
@DrawableRes | - | R.drawable |
@Fraction | - | 多用于Animation XML中,50%p |
@IdRes | - | R.id |
@InterpolatorRes | - | R.interpolator |
@LayoutRes | - | R.layout |
@MenuRes | - | R.menu |
@PluralsRes | - | 表示复数类型字符串 |
@RawRes | - | R.raw |
@StringRes | - | R.string |
@StyleableRes | - | R.styleable |
@StyleRes | - | R.style |
@TransitionRes | - | 标记整型值是transition类型的 |
@XmlRes | - | R.xml |
类型定义注解@IntDef
使用情景:
声明的一组int常量来表示类型,如果某方法只接收这几种常量,可以使用@IntDef; 如果某方法只要求返回这几种常量,可以使用@IntDef。
-
example1:
注解定义:
@Retention(SOURCE)
@IntDef({ORIGINAL, PORTRAIT})//常量可声明在任意位置
public @interface MyType {
}
使用:
public void setType(@MyType int type) {
}
这如下方式使用时,则编译器会报错
setType(8);
- example2
@IntDef(flag = true, value = {ORIGINAL, PORTRAIT}) //常量可声明在任意位置
public @interface MyType {
}
使用:
@MyType
public int getType() {
return 99; // 返回值与常量不相等,则报错
}
线程注解
@Target({METHOD,CONSTRUCTOR,TYPE})
- @UiThread @MainThread
- @WorkerThread
- @BinderThread
RGB 颜色值注解
@Target({PARAMETER,METHOD,LOCAL_VARIABLE,FIELD}
- @ColorInt
值范围注解
@Target({METHOD,PARAMETER,FIELD,LOCAL_VARIABLE})
-
@Size
源码:
@Retention(CLASS)
@Target({PARAMETER,LOCAL_VARIABLE,METHOD,FIELD,ANNOTATION_TYPE})
public @interface Size {
/** An exact size (or -1 if not specified) */
long value() default -1;
/** A minimum size, inclusive */
long min() default Long.MIN_VALUE;
/** A maximum size, inclusive */
long max() default Long.MAX_VALUE;
/** The size must be a multiple of this factor */
long multiple() default 1;
}
对于数组、集合字符串之类的参数,可以用@Size来表示这些参数的大小
* @Size(min=1), 表示集不为空
* @Size(max=23),表示字符串最大字符个数是23
* @Size(2), 表示元素个数是2
* @Size(multiple=2), 数组大小是2的倍数
- @IntRange
@IntRange(from=2,to=10) - @FloatRange
@FloatRange(from=0.0,to=1.0)
权限注解
@Target({ANNOTATION_TYPE,METHOD,CONSTRUCTOR,FIELD})
- @RequiresPermission(permision)<Br/>
@RequiresPermission(allOf={permision1,perminsion2})<Br/>
@RequiresPermission(anyOf={permision1,perminsion2})
重写方法注解
@Target({METHOD})
- @CallSuper 子类重写某个方法时,要求调用super,可以使用该注解
@CheckResult
提醒方法的调用者对方法的返回值进行检查
@VisibilityForTesting
@Keep
标记此类或方法不会被混淆