日志文章

2020-1-2 aflfte2011

通过反射获取泛型信息

package com.aflfte.test;

import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;

import com.aflfte.test.bean.User;

/**
 * 通过反射获取泛型信息
 *
 * @author root
 *
 */
public class Demo04 {
    public void test01(Map<String,User> map,List<User> list) {
        System.out.println("Demo04.test01()");
    }
    public Map<Integer, User> test02(){
        System.out.println("Demo04.test02");
        return null;
    }
    public static void main(String[] args) {
        try {
            //获取指定广泛参数泛型信息
            Method m=Demo04.class.getMethod("test01", Map.class,List.class);
            Type[] t=m.getGenericParameterTypes();//获取带泛型参数类型
            System.out.println(t.length);
            for(Type pt:t) {
                System.out.println("#"+pt);
                if(pt instanceof ParameterizedType) {//判断是不是包含泛型
                    Type[] gts=((ParameterizedType)pt).getActualTypeArguments();//获得泛型类型
                    for(Type gt:gts) {
                        System.out.println("泛型类型"+gt);
                    }
                }
            }
            //获取指定方法返回值泛型信息
            Method m2=Demo04.class.getMethod("test02", null);
            Type rt=m2.getGenericReturnType();//获取带泛型的返回类型
            if(rt instanceof ParameterizedType) {
                Type[] rgt=((ParameterizedType)rt).getActualTypeArguments();
                for(Type rgtt:rgt) {
                    System.out.println("返回值泛型信息:"+rgtt);
                }
            }
        } catch (Exception e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
        
    }
}

« 动态编译 | 通过反射API动态操作:构造器、方法、属性»