一、前言
下面通过Class的反射中getDeclaredField、getGenericType(java.lang.reflect.Type)、getActualTypeArguments等方法来实现获取类属性中泛型的类型(如获取Map<String, Number>中的String、Number),下面通过具体简单的示例来演示说明。
二、示例说明
获取TestgetGenericType类中属性collection的泛型的类型
package test;@b@@b@import java.lang.reflect.Field;@b@import java.lang.reflect.ParameterizedType;@b@import java.lang.reflect.Type;@b@import java.util.Map;@b@@b@public class TestgetGenericType {@b@ @b@private Map<String, Number> collection;@b@ @b@ public static void main(String[] args) throws Exception{@b@ Class<?> clazz = TestgetGenericType.class; //取得 Class@b@ Field field = clazz.getDeclaredField("collection"); //取得字段变量@b@ Type type = field.getGenericType(); //取得泛型的类型@b@ ParameterizedType ptype = (ParameterizedType)type; //转成参数化类型@b@ System.out.println(ptype.getActualTypeArguments()[0]); //取出第一个参数的实际类型@b@ System.out.println(ptype.getActualTypeArguments()[1]); //取出第二个参数的实际类型@b@ }@b@@b@}
控制台打印结果
class java.lang.String@b@class java.lang.Number