java获取泛型类型

泛型是自java1.5以后引入的概念,主要为了弥补java语言强类型特性带来的编程上的不便。

泛型的本质是一种参数化类型,对应的java中的类ParameterizedType.java所以,要获取运行时的泛型类型,只要获取到ParameterizedTypede 的实例即可。

Simple f = new Simple();
        try {
            Method m = f.getClass().getDeclaredMethod("m",null);
            Type type = m.getGenericReturnType();
            if(ParameterizedType.class.isAssignableFrom(type.getClass())){
                Stream.of(((ParameterizedType)type).getActualTypeArguments()).forEach(type1 -> {
                    System.out.println(type1+",");
                });
            }
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
public class Simple {
    public List<String> m(){
        return new ArrayList<>();
    }
}

如果是Field的话可以调用getGenericType获取类型实例,进而判断是否为参数化类型。