1. 自定义注解
/**
* @author ALguojian
* @date 2018/1/16
* 自定义注解
*/
public interface UserType {
String TOPIC = "topic";
String ORIGIN = "origin";
String MINI = "mini";
@StringDef({TOPIC, ORIGIN, MINI})
@Retention(RetentionPolicy.SOURCE)//指定注解仅存在与源码中,不加入到 class 文件中
@interface Type {}
}
实体类:
public class User {
@UserType.Type
private String name;
@NonNull
private int age;
public String getName() {
return name;
}
public void setName(@UserType.Type String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
使用:
User user = new User();
user.setAge(12);
user.setName(UserType.MINI);
@UserType.Type String aa = UserType.MINI;
switch (aa) {
case UserType.MINI:
break;
default:
break;
}
2. @NoNull,不能为null
源码如下:
@Retention(CLASS)
@Target({METHOD, PARAMETER, FIELD})
public @interface NonNull {
}
3. @Nullable 可以为null
源码如下:
@Documented
@Retention(CLASS)
@Target({METHOD, PARAMETER, FIELD, LOCAL_VARIABLE, ANNOTATION_TYPE, PACKAGE})
public @interface Nullable {
}
4. Resource Type 资源类型注解
- @AnimatorRes: animator资源类型
- @AnimRes: anim资源类型
- @AnyRes: 任意资源类型
- @DrawableRes: drawable资源类型
- @LayoutRes: layout资源类型
- @ColorInt: RGB颜色类型
此类注解以Res结尾,比如@BoolRes, @IdRes, @IntegerRes, @StringRes, @ColorRes等,这里以@ColorRes为例说明
@Documented
@Retention(CLASS)
@Target({METHOD, PARAMETER, FIELD, LOCAL_VARIABLE})
public @interface ColorRes {
}
列子:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getCurColor(R.id.ic_launcher);
}
void getCurColor(@ColorRes int color) {
Toast.makeText(this, "Color: " + getString(color), Toast.LENGTH_LONG).show();
}
}
我们给getColor函数的参数color加上了@ColorRes注解,即该参数是一个颜色资源,而上面我们上面传递的是id资源
5. 设置取值范围:Value Constraints
@Size, @IntRange, @FloatRange
private void test(@IntRange(from=0,to=100)int perent){
- 集合不能为空: @Size(min=1)
- 字符串最大只能有23个字符: @Size(max=23)
- 数组只能有2个元素: @Size(2)
- 数组的大小必须是2的倍数 (例如图形API中获取位置的x/y坐标数组: @Size(multiple=2)