Java开发

使用反射获取泛型

2020-02-06  本文已影响0人  风中小酌
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 TestReflectFanxing {
    //方法中有三个参数,第一个参数有两个泛型,第二个参数有一个泛型,第三个参数为普通参数
    public void test01(Map<String, User> para1, List<User> alist, String str){
        System.out.println("Test Generic.Test01()");
    }
    //方法的返回类型为两个泛型
    public Map<User, Integer> test02(){
        System.out.println("Test Generic.Test02()");
        return null;
    }
    //方法的返回类型为普通字符串
    public String test03(){
        System.out.println("Test Generic.Test03()");
        return null;
    }

    public static void main(String[] args) throws NoSuchMethodException, SecurityException {
        //获取类的Class对象
        Class cls = TestReflectFanxing.class;
        //获取方法test01的泛型参数信息
        Method m1 = cls.getMethod("test01", Map.class, List.class, String.class);
        Type[] m1type = m1.getGenericParameterTypes();
        for(Type t : m1type){
            if(t instanceof ParameterizedType){
                Type[] tt = ((ParameterizedType) t).getActualTypeArguments();
                for(Type subt : tt){
                    System.out.println("泛型类型:" + subt);
                }
                System.out.println("-----------------");
            }
        }
    
        //获取方法test02返回参数中的泛型类型
        Method m2 = cls.getMethod("test02");
        Type t2 = m2.getGenericReturnType();
        if(t2 instanceof ParameterizedType){
            Type[] sub2 = ((ParameterizedType) t2).getActualTypeArguments();
            for(Type tt2 : sub2){
                System.out.println("返回参数类型为: " + tt2);
            }
        }
    
        System.out.println("=========================");
        Method m3 = cls.getMethod("test03");
        Type t3 = m3.getGenericReturnType();
        System.out.println("test03的返回类型:" + t3);
        System.out.println(t3 instanceof ParameterizedType);
    }
}
上一篇下一篇

猜你喜欢

热点阅读