ParameterizedType参数化类型

参数化类型

public interface ParameterizedType extends Type {
    Type[] getActualTypeArguments();

    Type getRawType();

    Type getOwnerType();
}

何为参数化类型
列举一个实体类用代码来解释什么是参数化类型

public class ParameterizedBean {
    List<String> list1;
    List list2;
    Map<String,Long> map1;
    Map map2;
    Map.Entry<Long,Short> map3;
}

测试代码

Field[] fields = ParameterizedBean.class.getDeclaredFields();
for(Field f:fields){
    //是否是ParameterizedType
    System.out.print(f.getName()+":"+(f.getGenericType() instanceof ParameterizedType));
}

打印结果

list1:true
list2:false
map1:true
map2:false
map3:true

从打印结果看来,具有<>符号的变量是参数化类型

Type[] getActualTypeArguments()

该方法返回一个Type数组
测试代码

Field[] fields = ParameterizedBean.class.getDeclaredFields();
for(Field f:fields){
    if(f.getGenericType() instanceof ParameterizedType){
        ParameterizedType pType =(ParameterizedType) f.getGenericType();
System.out.print("变量:"+pType.getTypeName()+"     ");
              Type[] types =pType.getActualTypeArguments();
              for(Type t:types){
System.out.print("类型:"+t.getTypeName());
              }
}

先把实体类放下来,免得往上翻

public class ParameterizedBean {
    List<String> list1;
    List list2;
    Map<String,Long> map1;
    Map map2;
    Map.Entry<Long,Short> map3;
}

打印结果

变量:list1     类型:java.lang.String
变量:map1     类型:java.lang.String类型:java.lang.Long
变量:map3     类型:java.lang.Long类型:java.lang.Short   

从打印结果返回来看,getActualTypeArguments()返回了一个Type数组,数组里是参数化类型的参数

参考:ParameterizedType详解
Java反射-基于ParameterizedType实现泛型类类型参数化

发布了216 篇原创文章 · 获赞 91 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/yu75567218/article/details/87628181