反射获取泛型+获取注解

反射获取泛型

  1. // method.getGenericParameterTypes();   获取泛型的参数信息
    // method.getGenericExceptionTypes()    获取泛型的异常信息
    // method.getGenericReturnType();       获取泛型的返回信息
    // 如果有就开始循环遍历       ParameterizedType   参数化类型
    // 开始强转成泛型  .getActualTypeArguments();      获取它真实的参数类型
    
  2. public class Test05 {
    
        public void test01(Map<String,User> map, List<User> list){
            System.out.println("test01");
        }
    
        public Map<String,User> test02(){
            System.out.println("test02");
            return null;
        }
    
        public static void main(String[] args) throws NoSuchMethodException {
            // 用反射获取方法
            Method method = Test05.class.getMethod("test01", Map.class, List.class);
            // method.getGenericParameterTypes();   获取泛型的参数信息
            // method.getGenericExceptionTypes()    获取泛型的异常信息
            // method.getGenericReturnType();       获取泛型的返回信息
            Type[] genericParameterTypes = method.getGenericParameterTypes();
            for (Type genericParameterType : genericParameterTypes) {
                // 打印参数信息
                System.out.println("#"+genericParameterType);
                // 判断这个对象是否有泛型
                // 如果有就开始循环遍历       ParameterizedType   参数化类型
                if (genericParameterType instanceof ParameterizedType){
                    // 开始强转成泛型  .getActualTypeArguments();      获取它真实的参数类型
                    Type[] actualTypeArguments = ((ParameterizedType) genericParameterType).getActualTypeArguments();
                    for (Type actualTypeArgument : actualTypeArguments) {
                        System.out.println(actualTypeArgument);
                    }
                }
            }
            System.out.println("========================");
            method = Test05.class.getMethod("test02",null);
            Type genericReturnType = method.getGenericReturnType();
            if (genericReturnType instanceof ParameterizedType){
                Type[] actualTypeArguments = ((ParameterizedType) genericReturnType).getActualTypeArguments();
                for (Type actualTypeArgument : actualTypeArguments) {
                    System.out.println(actualTypeArgument);
                }
            }
        }
    }
    

反射获取注解

  1. 对象.getAnnotations();		获取注解
    输出出来的是注解的类信息;下面是获取注解的值
    /**
    * 反射获取注解的值
    * 首先获取反射的类,根据类进行获取反射的值
    * 强转成反射的类   里面有value方法  就能获取反射的值
    */
    TableWen tableWen = (TableWen) c1.getAnnotation(TableWen.class);
    System.out.println(tableWen.value());
    
    // 反射获取属性的值
    Field[] declaredFields = c1.getDeclaredFields();
    for (Field declaredField : declaredFields) {
    	ColumnWen c = (ColumnWen) declaredField.getAnnotation(ColumnWen.class);
    	System.out.println("长度是:" + c.length() + ",名字是:" + c.name() + ",类型是:" + c.type());
    }
    
  2. 本类的信息

    public class Test06反射获取注解 {
        public static void main(String[] args) throws ClassNotFoundException {
            // 反射来获取注解
            Class c1 = Class.forName("com.lening.reflection.Student");
            Annotation[] annotations = c1.getAnnotations();
            for (Annotation annotation : annotations) {
                System.out.println(annotation);
            }
    
            /**
             * 反射获取注解的值
             * 首先获取反射的类,根据类进行获取反射的值
             * 强转成反射的类   里面有value方法  就能获取反射的值
             */
            TableWen tableWen = (TableWen) c1.getAnnotation(TableWen.class);
            System.out.println(tableWen.value());
    
            // 反射获取属性的值
            Field[] declaredFields = c1.getDeclaredFields();
            for (Field declaredField : declaredFields) {
                ColumnWen c = (ColumnWen) declaredField.getAnnotation(ColumnWen.class);
                System.out.println("长度是:" + c.length() + ",名字是:" + c.name() + ",类型是:" + c.type());
            }
        }
    }
    
    @TableWen("db_Wen")
    class Student {
        @ColumnWen(name = "name", type = "varChar", length = 3)
        private String name;
        @ColumnWen(name = "age", type = "Integer", length = 4)
        private int age;
        @ColumnWen(name = "uuid", type = "Integer", length = 5)
        private int id;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public Student(String name, int age, int id) {
            this.name = name;
            this.age = age;
            this.id = id;
        }
    
        public Student() {
        }
    
        @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    ", id=" + id +
                    '}';
        }
    }
    
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @interface TableWen {
        String value();
    }
    
    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    @interface ColumnWen {
        String name();
    
        String type();
    
        int length();
    }
    
posted @ 2021-04-05 16:29  W·EN  阅读(408)  评论(0)    收藏  举报