1.源码
package java.lang.reflect;
/**
* ParameterizedType 表示一种参数化的类型 例如 Collection<String>
*
*
* 实现了该接口的classes实例必须实现一个可以比较任何两个具有相同泛型类型生命和相同参数类型的实例的
* equals()方法
* @since 1.5
*/
public interface ParameterizedType extends Type {
/**
* 返回一个最外层<>包裹的泛型参数类型数组
*/
Type[] getActualTypeArguments();
/**
* 返回最外层<>前面的类型,即该类型的本身类型。
* @since 1.5
*/
Type getRawType();
/**
* 返回该类型的拥有者类型,针对内部类而言。
* @since 1.5
*/
Type getOwnerType();
}
2.举例
package com.tangjianghua.common.java.lang.reflect;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.*;
/**
* @author tangjianghua
* date 2020/3/24
* time 14:21
*/
public class ParameterizedTypeTest {
Map<String,String> map1;
Map<String,Map<String,Object>> map2;
Map<String,? extends Collection> map3;
HashMap.Entry<String,?> entry;
public static void main(String[] args) {
Field[] fields = ParameterizedTypeTest.class.getDeclaredFields();
for(Field f:fields){
//是否是ParameterizedType
System.out.println(f.getName()+"是否是ParameterizedType:"+(f.getGenericType() instanceof ParameterizedType));
ParameterizedType genericType = (ParameterizedType) f.getGenericType();
Type[] actualTypeArguments = genericType.getActualTypeArguments();
System.out.println("getActualTypeArguments:"+ Arrays.toString(actualTypeArguments));
Type rawType = genericType.getRawType();
System.out.println("getRawType:"+ rawType);
Type ownerType = genericType.getOwnerType();
System.out.println("getOwnerType:"+ ownerType+"\n");
}
}
}
控制台:
map1是否是ParameterizedType:true
getActualTypeArguments:[class java.lang.String, class java.lang.String]
getRawType:interface java.util.Map
getOwnerType:null
map2是否是ParameterizedType:true
getActualTypeArguments:[class java.lang.String, java.util.Map<java.lang.String, java.lang.Object>]
getRawType:interface java.util.Map
getOwnerType:null
map3是否是ParameterizedType:true
getActualTypeArguments:[class java.lang.String, ? extends java.util.Collection]
getRawType:interface java.util.Map
getOwnerType:null
entry是否是ParameterizedType:true
getActualTypeArguments:[class java.lang.String, ?]
getRawType:interface java.util.Map$Entry
getOwnerType:interface java.util.Map
Process finished with exit code 0