泛型是自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获取类型实例,进而判断是否为参数化类型。