有什么方法可以在返回类型使用泛型?关于Java的相关问题

例如
public List a(Class clazz){
return null;
}
让存储是clazz类型的List返回
List<T> T不能是限定 而是clazz类型

慕容3067478
浏览 243回答 3
3回答

墨色风雨

参考这段List克隆代码。返回的List<T>中T为入参的Class<T>public static <S, T> List<T> copyList(List<S> source,Class<T> targetClass) {if (CollectionUtils.isEmpty(source)) {return new ArrayList<T>();}String json = JSON.toJSONString(source);List<T> list = JSON.parseArray(json, targetClass);return list;}

婷婷同学_

主要是一个编译期的检查,也避免了我们代码中的强制转换,比较经典的用法有泛型DAO,泛型Page的DTO。现在我要说的是一个挺有趣但是貌似还不是太多的人在代码中使用的方法,前段时间用guava和op4j的时候发现这样的用法,看看了源码,也是很简单的。比如guava中创建集合的方法 List<xx> list = Lists.newArrayList(),这个代替了我们传统的 new ArrayList<xx>,为什么在=的右边不需要泛型了呢,我们看看源码。[java] view plaincopypublic static <E> ArrayList<E> newArrayList() {return new ArrayList<E>();}返回类型中带有泛型E,并且这个泛型的来源在 static和 ArrayList之间的位置,我自己的理解是这个就和=左边的一致,可能说的不够专业但是意思应该就这样。于是我就依样画葫芦在自己的代码中也用了起来。我要做的是一个仿httpsession机制的自定义协议是session。在httpsession.getAttribute方法返回的是一个Object,然后我们再类型转换。现在我用返回类型泛型来优化这个代码,以下是我自定义协议session的getAttribute的代码。[java] view plaincopy@SuppressWarnings("unchecked")public <E> E getAttribute(String key) {return (E) map.get(key);}调用代码[java] view plaincopyBoolean isFirst = session.getAttribute("first");在httpsession中我们则要这么写[java] view plaincopyBoolean isFirst = (Boolean)session.getAttribute("first");泛型的用法还有很多,有新的心得再补充更新

慕后森

比如public List<User> a(Class class){List<User> list = .....;return list;}
打开App,查看更多内容
随时随地看视频慕课网APP