您的位置 首页 技术

在java中如何使用反射获取泛型信息

ParameterizedType就是参数化类型的意思。 解释: 声明类型中带有“<>”的都是参数化类型,比如List<Integer>,Map<St…

ParameterizedType就是参数化类型的意思。

解释:

声明类型中带有“<>”的都是参数化类型,比如List<Integer>Map<String,BigDecimal>

getActualTypeArguments()返回Type[],即“<>”里的参数,比如Map<String,BigDecimal>

getRawType()返回Tpye,得到“<>”前面的类型,比如List<String>

getOwnerType()返回Type,O<T>.I<S>类型变量调用时会返回O<T>,比如Map.Entry<Long,Short>

免费教学视频分享:java课程

实例代码:

import org.junit.Test;import java.lang.reflect.Field;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.math.BigDecimal;import java.util.Map;public class ReflectDemo {    private static Map<String, BigDecimal>map;    @Test    public void test(){        try {            Class<?> aClass = Class.forName("com.test.annotation.param.ReflectDemo");            //获取map属性对象            Field field = aClass.getDeclaredField("map");            //获取map属性的类型            Type type = field.getGenericType();//返回属性声明的Type类型            if (type instanceof ParameterizedType) {                //强转为ParameterizedType对象                ParameterizedType parameterizedType = (ParameterizedType) type;                //获取原始类型                Type rawType = parameterizedType.getRawType();                System.out.println("map的原始类型为:"+rawType);                //获取map的类型的所有泛型信息                Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();                for(int i=0;i<actualTypeArguments.length;i++){                    System.out.println("Map类型的第"+(i+1)+"个泛型为:"+actualTypeArguments[i]);                }            }        } catch (Exception e) {            e.printStackTrace();        }    }}

运行结果:

3dfff57efc050b6fa2496da131df79c.png

java相关文章教程推荐:java入门教程

以上就是在java中如何使用反射获取泛型信息的详细内容,更多请关注24课堂在线网其它相关文章!

本文来自网络,不代表24小时课堂在线立场,转载请注明出处:https://www.24ketang.cn/10870.html

为您推荐

返回顶部