这篇文章给大家分享的是java中用反射获取泛型信息的方法,相信大部分人都还没学会这个技能,为了让大家学会,给大家总结了以下内容,话不多说,一起往下看吧。

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>

实例代码:

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(); } }}

运行结果:

以上就是java中用反射获取泛型信息的方法的详细内容,代码示例简单明了,如果在日常工作遇到此问题。通过这篇文章,希望你能有所收获,更多详情敬请关注亿速云行业资讯频道!