import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Field;
public class test {
public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {
Person person = new Person("a","pass");
//循环遍历所有字段
for (Field field : person.getClass().getDeclaredFields()) {
//获取字段上注解
Range range = field.getAnnotation(Range.class);
//如果注解不为空
if (range != null) {
//获取对象该字段值
Object value = field.get(person);
//判断类型是否为String
if (value instanceof String) {
String str = (String)value;
//判断字段的值是否符合注解的条件
if (str.length() > range.max() || str.length() < range.min()) {
System.out.println("出问题了呀兄弟。");
if (str.length() > range.max()) {
System.out.println(field.toString() + "\t\t" + str + "\t" + "太长了呀兄弟。");
}
if (str.length() < range.min()) {
System.out.println(field.toString() + "\t\t" + str + "\t" + "太短了呀兄弟。");
}
}
}
}
}
}
}
@Retention(RetentionPolicy.RUNTIME)//此注解作用在运行时
@Target(ElementType.FIELD)//此注解作用在字段上
@interface Range{
int min() default 0;
int max() default 10;
}
class Person{
@Range(min = 2 ,max = 5) //定义名字为2到5 个字节
public String name;
@Range //使用默认值,定义pass为0到10个字节
public String pass;
@Override
public String toString() {
return "Person [name=" + name + ", pass=" + pass + "]";
}
public Person(String name, String pass) {
super();
this.name = name;
this.pass = pass;
}
}
控制台输出
出问题了呀兄弟。
public java.lang.String com.test.Person.name a 太短了呀兄弟。