业务中有个需求不确定,校验规则来回变,所以看了一下自定义注解然后写了个统一的校验方法,改起来很方便,欢迎补充。
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Company {
public int id() default -1;
public String name() default "";
public String address() default "";
}
@Target作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
取值(ElementType)有:
1.CONSTRUCTOR:用于描述构造器
2.FIELD:用于描述域
3.LOCAL_VARIABLE:用于描述局部变量
4.METHOD:用于描述方法
5.PACKAGE:用于描述包
6.PARAMETER:用于描述参数
7.TYPE:用于描述类、接口(包括注解类型) 或enum声明
@Retention作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)
取值(RetentionPoicy)有:
1.SOURCE:在源文件中有效(即源文件保留)
2.CLASS:在class文件中有效(即class保留)
3.RUNTIME:在运行时有效(即运行时保留)
使用实例
Field[] fields = clazz.getDeclaredFields();//获取类成员变量
for (Field field: fields) {//遍历
if (field.isAnnotationPresent(Company.class)) {//判断是不是EmployeeName类型注解
Company company = field.getAnnotation(Company.class);
info.put("company",company.id()+":"+company.name()+":"+company.address());//获取注解的值
}
}