首页

通过Class反射机制ParameterizedType、getGenericType及getActualTypeArguments获取泛型的类型示例

标签:泛型,getGenericType,reflect,Class类反射,getActualTypeArguments,ParameterizedType     发布时间:2018-01-14   

一、前言

下面通过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