反射操作泛型

反射操作泛型

  • Java采用泛型擦除的机制引入泛型,java中泛型仅给编译器javac使用,确保数据的安全性和免去强制类型转换问题,一旦编译完成和泛型相关的类型全部擦除

  • 反射操作泛型,通过4种类型

    • ParameterizedType:表示一种参数化类型,比如Collection
    • GenericArrayType: 表示一种元素类型是参数化类型或者类型变量的数组类型
    • TypeVariable: 是各种类型变量的公共父接口
    • WildcardType:代表通配符类型表达式
  • package com.zhou.reflection;
    
    import com.zhou.HelloWorld;
    import jdk.swing.interop.SwingInterOpUtils;
    
    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 test06 {
        public List<Integer> method1(Map<String,HelloWorld> map, List<String>  list){
            System.out.println("ok");
            return null;
        }
    
        public static void main(String[] args) throws NoSuchMethodException {
    
            Method method1 = test06.class.getMethod("method1", Map.class, List.class);
            Type[] genericParameterTypes = method1.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);
                    }
                }
            }
            //返回值泛型 
            System.out.println("返回值泛型");
            Type genericReturnType = method1.getGenericReturnType();
            if(genericReturnType instanceof ParameterizedType) {
                Type[] actualTypeArguments = ((ParameterizedType) genericReturnType).getActualTypeArguments();
                for (Type actualTypeArgument : actualTypeArguments) {
                    System.out.println(actualTypeArgument);
                }
            }
        }
    }
    
posted @ 2021-09-15 15:28  貂蝉贼6  阅读(53)  评论(0)    收藏  举报