如何定义Annotation
第一步,用@interface定义注解:
第二步,添加参数、默认值:
第三步,用元注解配置注解:
1:定义一个注解类
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Range {
int min() default 0;
int max() default 255;
}
2:定义bean对象
public class Person {
@Range(min=1,max=20)
public String name;
@Range(max=100)
public Integer age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
3:定义测试方法
public class PersonFieldCheck {
public static void main(String[] args) throws IllegalAccessException {
Person p=new Person("Sam",10);
check(p);
}
static void check(Person person) throws IllegalAccessException {
for(Field field:person.getClass().getFields()){
Range range=field.getAnnotation(Range.class);
if(range!=null){
Object value=field.get(person);
if(value instanceof Integer){
Integer i=(Integer)value;
if(i.intValue()<range.min()||i.intValue()>range.max()){
System.out.println("invalid second field: "+field.getName());
}
}else if(value instanceof String){
String s=(String)value;
if(s.length()<4 ||s.length()>10){
System.out.println("invalid first field: "+field.getName());
}
}
}
}
}
}