您好,欢迎来到华拓科技网。
搜索
您的当前位置:首页反射_通过反射获取泛型的类型

反射_通过反射获取泛型的类型

来源:华拓科技网
一些泛型相关的类型:
        ParameterizedType    参数化类型 即带参数(泛型参数)的数据类型(带"<>"的数据类型)
        GenericArrayType     泛型数组(Xxx<T>[]或T[])
        TypeVariable         泛型类型(T、K、V等)
        WildcardType         通配符类型(? extends Xxx等)

参数为泛型的方法 与 返回值为泛型的方法

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

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

获取泛型的类型

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

//通过反射获取泛型的类型

// ParameterizedType    参数化类型 即带参数(泛型参数)的数据类型(带"<>"的数据类型)
// GenericArrayType     泛型数组(Xxx<T>[]或T[])
// TypeVariable         泛型类型(T、K、V等)
// WildcardType         通配符类型(? extends Xxx等)

public class Test_07 {
    public static void main(String[] args) throws NoSuchMethodException {
        Class<Test_07> aclass = Test_07.class;
        Method method01 = aclass.getMethod("test01", Map.class, List.class);
        Method method02 = aclass.getMethod("test02");

        //getGenericParameterTypes() 获取参数的泛型的类型
        Type[] genericParameterTypes = method01.getGenericParameterTypes();
        //输出泛型的类型
        for (Type genericParameterType : genericParameterTypes){
            System.out.println(genericParameterType);
            //ParameterizedType 参数化类型 即带参数(泛型参数)的数据类型(带"<>"的数据类型)
            if (genericParameterType instanceof ParameterizedType){
                Type[] actualTypeArguments = ((ParameterizedType) genericParameterType).getActualTypeArguments();
                for (Type actualTypeArgument : actualTypeArguments) {
                    System.out.println("参数的泛型类型: " + actualTypeArgument);
                }
            }
        }

        System.out.println("====================");

        //getGenericReturnType() 获取返回值的泛型的类型
        Type genericReturnType = method02.getGenericReturnType();
        //输出泛型的类型
        //ParameterizedType 参数化类型 即带参数(泛型参数)的数据类型(带"<>"的数据类型)
        if (genericReturnType instanceof ParameterizedType){
            Type[] actualTypeArguments = ((ParameterizedType) genericReturnType).getActualTypeArguments();
            for (Type actualTypeArgument : actualTypeArguments) {
                System.out.println("返回值的泛型类型: " + actualTypeArgument);
            }
        }
    }
}

运行结果

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo6.cn 版权所有 赣ICP备2024042791号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务