利用反射来获取泛型的类型(泛型信息)
步骤:
1.获取当前类
2.获取目标字段
3.获取包含泛型类型的类型 getGenericType()
4.强转至子类ParameterizedType
5.获得泛型真正的类型 getActualTypeArguments()
package cn_itcast02;
import java.lang.reflect.Field;
import java.lang.reflect.Parameter;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
public class Demo1 {
Map<String, Integer> map = new HashMap<String, Integer>();
public static void main(String[] args) throws NoSuchFieldException,
SecurityException {
Class c = Demo1.class;
Field f = c.getDeclaredField("map");
System.out.println(f);
System.out.println(f.getName());
Class c1=f.getType();
System.out.println(c1);//获得其类型:interface java.util.Map
Type t=f.getGenericType();//包含泛型的类型
System.out.println(t);//java.util.Map<java.lang.String, java.lang.Integer>
ParameterizedType pt=(ParameterizedType)t;
t=pt.getRawType();
System.out.println(t);//ParameterizedType
Type[]ts=pt.getActualTypeArguments();
for(Type type:ts){
System.out.println(type);//class java.lang.String,class java.lang.Integer
}
}
}