根据反射,提取引用类型,不包含基本数据类型,以及基本数据类型的包装类,及单列集合,和双列集合
/*** 是否为引用数据类型*/private static boolean isPrimitive(Class<?> clazz) {if (clazz.equals(String.class) || ClassUtil.isBasicType(clazz)) {return false;}if (clazz.isArray() && ClassUtil.isSimpleValueType(clazz.getComponentType())) {return false;}return !Collection.class.isAssignableFrom(clazz) && !Map.class.isAssignableFrom(clazz);}
/*** 根据参数类型,获取泛型里所有的引用clazz* 列: public List<PageResult<List<User>>> intTest(RequestEntity<Map<String, List<PageResult<User>>>> req)* <p>* class org.springframework.http.RequestEntity* class aa.bb.cc.User** @param type Type* @param list list*/private static void getAllParameter(Type type, List<Class<?>> list) {Class<?> c1 = TypeUtil.getClass(type);if (type instanceof ParameterizedType) {if (isPrimitive(c1)) {list.add(c1);}Type[] ts = ((ParameterizedType) type).getActualTypeArguments();for (Type tp : ts) {getAllParameter(tp, list);}} else {if (isPrimitive(c1)) {list.add(c1);}}}
Field listString = Primitive.class.getDeclaredField("req");List<Class<?>> list = new ArrayList<>();getAllParameter(listString.getGenericType(), list);list.forEach(System.out::println);