返回顶端

Java 注解与反射(六)反射操作泛型

Java 注解与反射(六)反射操作泛型

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 Test04 {
    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 = Test04.class.getMethod("test01", Map.class, List.class);    //获取test01()的参数泛型
        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);
                }
            }
        }

        System.out.println("--------------------------");
        method = Test04.class.getMethod("test02");      //获取test02()的返回值泛型
        Type genericReturnType = method.getGenericReturnType();
        if(genericReturnType instanceof ParameterizedType){
            Type[] actualTypeArguments = ((ParameterizedType) genericReturnType).getActualTypeArguments();
            for (Type actualTypeArgument : actualTypeArguments) {
                System.out.println("真实返回类型:"+actualTypeArgument);
            }
        }
    }
}

posted @ 2021-04-03 16:16  EEEEEEEric  阅读(78)  评论(0)    收藏  举报