需求是这样的,集合对象做为参数传入方法,能不能利用java反射获取集合对象泛型的实际类型
例如:getType(List<T> objectList)
有没有方法获取实际传入参数的泛型T的实际类型?
我很久以前就试过 上结论
如果是子类实现时声明了泛型 是可以拿到的 比如 class StringList extend ArrayList<String> 这样你可以拿到 String.class 这个类型
但是很悲剧的告诉楼主 一般不会有那么无聊去搞实现 都是直接new出来就用 由于本身的类型擦除机制 是拿不到具体的内容的类型的
这里有个取巧的方法 就是如果不是一个空的集合 那么可以尝试拿第一个值的类型作为该集合的类型标示
如果是空的 那就没办法了
public class BaseMysqlDao<T> { private Class<T> entityClass; @SuppressWarnings("unchecked") public BaseMysqlDao() { entityClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; } }
我很久以前就试过 上结论
如果是子类实现时声明了泛型 是可以拿到的 比如 class StringList extend ArrayList<String> 这样你可以拿到 String.class 这个类型
但是很悲剧的告诉楼主 一般不会有那么无聊去搞实现 都是直接new出来就用 由于本身的类型擦除机制 是拿不到具体的内容的类型的
这里有个取巧的方法 就是如果不是一个空的集合 那么可以尝试拿第一个值的类型作为该集合的类型标示
如果是空的 那就没办法了
public class BaseMysqlDao<T> { private Class<T> entityClass; @SuppressWarnings("unchecked") public BaseMysqlDao() { entityClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; } }