package AnnotationDemo;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.lang.annotation.Annotation;import java.lang.reflect.Field;public class AnnotationDemo1 { //初始化slf4j logger实例 用于在后续如果不符合注解 将其打印输出到文件中 static final Logger logger= LoggerFactory.getLogger(AnnotationDemo1.class); public static void main(String[] args) throws IllegalAccessException { //虽然在Num类中已经打了注解 但是可以看到注解对于代码逻辑本身并不会产生任何影响 //这时候我们就要自己写方法 首先获取注解 然后完成校验 Num num=new Num("asdf",50); System.out.println(num.Name); check(num); } //检查Num类的实例 所定义的字段number是否符合要求的注解 min =10 max=40 public static void check(Num num) throws IllegalAccessException { //通过反射来获取当前num这个实例的注解 //1、获取Class cls Class cls=num.getClass(); //2、获取到所有的字段 Field[] fields=cls.getFields(); //3、遍历获取到的所有字段 for(Field f:fields){ // 获取Field定义的@Range: Range range = f.getAnnotation(Range.class); //如果当前字段确实有range注解 if(range!=null){ //获取当前field 对应到num实例 Object value=f.get(num); //如果当前value是int类型 if(value instanceof Integer){ if((Integer)value>= range.min() && (Integer)value <= range.max()){ logger.info("当前实例的{}符合注解要求",f.getName()); } else{ logger.error("超出"); } } } } }}class Num{ @NotNull public String Name; @Range(min=10,max = 40) public int number; public Num(){ } public Num(String name,int n){ this.Name=name; this.number=n; }}
Sign in to make a reply
张卿长