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

一些泛型相关的类型:
        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);
            }
        }
    }
}

运行结果

​​​​​​​

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值