利用反射获取泛型

package com.duchong.aar.reflect.T;

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 DemoT {

    public void test01(Map<String,Integer> map, List<String> list){
        System.out.println("DemoT.test01()");
    }

    public Map<Integer,String> test02(){
        System.out.println("DemoT.test02()");
        return null;
    }

    public static void main(String[] args) {

        try {

            //获得指定方法参数泛型信息
            Method m = DemoT.class.getMethod("test01", Map.class,List.class);
            Type[] t = m.getGenericParameterTypes();
            for (Type paramType : t) {
                System.out.println("#"+paramType);
                if(paramType instanceof ParameterizedType){
                    Type[] genericTypes = ((ParameterizedType) paramType).getActualTypeArguments();
                    for (Type genericType : genericTypes) {
                        System.out.println("泛型类型:"+genericType);
                    }
                }
            }

            //获得指定方法返回值泛型信息
            Method m2 = DemoT.class.getMethod("test02", null);
            Type returnType = m2.getGenericReturnType();
            if(returnType instanceof ParameterizedType){
                    Type[] genericTypes = ((ParameterizedType) returnType).getActualTypeArguments();

                    for (Type genericType : genericTypes) {
                        System.out.println("返回值,泛型类型:"+genericType);
                    }

            }


        } catch (Exception e) {
            e.printStackTrace();
        }



    }
}

猜你喜欢

转载自www.cnblogs.com/geekdc/p/10976764.html
今日推荐