32day

day32

反射操作泛型

package com.wang.reflection;

import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;

//通过反射获取泛型
public class Test11 {

   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 = Test11.class.getMethod("test01", Map.class, List.class);

       Type[] genericParameterTypes = method.getGenericParameterTypes();
       for (Type genericParameterType : genericParameterTypes) {
           System.out.println("##"+genericParameterType);
           if (genericParameterType instanceof ParameterizedType){
               Type[] actualTypeArguments = ((ParameterizedType) genericParameterType).getActualTypeArguments();
               for (Type actualTypeArgument : actualTypeArguments) {
                   System.out.println(actualTypeArgument);
              }
          }
      }
       method = Test11.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);
          }
      }
  }
}

反射操作注解

什么是ORM?

  • Object relationship Mapping-->对象关系映射

  • 类和表结构对应

  • 属性和字段对应

  • 对象和记录对应

package com.wang.reflection;

import java.lang.annotation.*;
import java.lang.reflect.Field;

//练习反射操作注解
public class Test12 {
   public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {
       Class c1 = Class.forName("com.wang.reflection.Student2");

       //通过反射获得注解
       Annotation[] annotations = c1.getAnnotations();
       for (Annotation annotation : annotations) {
           System.out.println(annotation);
      }

       //获得注解value的值
       Tablewang annotation = (Tablewang) c1.getAnnotation(Tablewang.class);
       String value = annotation.value();
       System.out.println(value);

       //获得类指定的注解
       Field f = c1.getDeclaredField("id");
       Fieldwang annotation1 = f.getAnnotation(Fieldwang.class);
       System.out.println(annotation1.columnName());
       System.out.println(annotation1.type());
       System.out.println(annotation1.length());
  }
}

@Tablewang("db_student")
class Student2{

   @Fieldwang(columnName = "db_id",type = "int",length = 10)
   private int id;
   @Fieldwang(columnName = "db_age",type = "int",length = 10)
   private int age;
   @Fieldwang(columnName = "db_name",type = "varchar",length = 3)
   private String name;

   public Student2(){

  }

   public Student2(int id, int age, String name) {
       this.id = id;
       this.age = age;
       this.name = name;
  }

   public int getId() {
       return id;
  }

   public void setId(int id) {
       this.id = id;
  }

   public int getAge() {
       return age;
  }

   public void setAge(int age) {
       this.age = age;
  }

   public String getName() {
       return name;
  }

   public void setName(String name) {
       this.name = name;
  }

   @Override
   public String toString() {
       return "Student2{" +
               "id=" + id +
               ", age=" + age +
               ", name='" + name + '\'' +
               '}';
  }
}

//类名的注解
@Target(ElementType.TYPE)//作用域
@Retention(RetentionPolicy.RUNTIME)//什么级别可以获取
@interface Tablewang{
   String value();
}

//属性的注解
@Target(ElementType.FIELD)//作用域
@Retention(RetentionPolicy.RUNTIME)//什么级别可以获取(运行时)
@interface Fieldwang{
   String columnName();
   String type();
   int length();
}

 

posted @ 2021-05-13 15:55  卧剑之鱼  阅读(189)  评论(0)    收藏  举报