反射获取泛型+获取注解
反射获取泛型
-
// method.getGenericParameterTypes(); 获取泛型的参数信息 // method.getGenericExceptionTypes() 获取泛型的异常信息 // method.getGenericReturnType(); 获取泛型的返回信息 // 如果有就开始循环遍历 ParameterizedType 参数化类型 // 开始强转成泛型 .getActualTypeArguments(); 获取它真实的参数类型 -
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); } } } }
反射获取注解
-
对象.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()); } -
本类的信息
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(); }

浙公网安备 33010602011771号