java 方法中如何在返回类型使用泛型

例如publicLista(Classclazz){returnnull;}让存储是clazz类型的List返回List<T>T不能是限定而是clazz类型... 例如
public List a(Class clazz){
return null;
}
让存储是clazz类型的List返回
List<T> T不能是限定 而是clazz类型
展开
 我来答
似灵杉0Ey
推荐于2016-04-04 · TA获得超过313个赞
知道小有建树答主
回答量:341
采纳率:55%
帮助的人:145万
展开全部
主要是一个编译期的检查,也避免了我们代码中的强制转换,比较经典的用法有泛型DAO,泛型Page的DTO。

现在我要说的是一个挺有趣但是貌似还不是太多的人在代码中使用的方法,前段时间用guava和op4j的时候发现这样的用法,看看了源码,也是很简单的。

比如guava中创建集合的方法 List<xx> list = Lists.newArrayList(),这个代替了我们传统的 new ArrayList<xx>,为什么在=的右边不需要泛型了呢,我们看看源码。

[java] view plaincopy
public 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 plaincopy
Boolean isFirst = session.getAttribute("first");
在httpsession中我们则要这么写
[java] view plaincopy
Boolean isFirst = (Boolean)session.getAttribute("first");

泛型的用法还有很多,有新的心得再补充更新
fly4444fly
推荐于2018-05-09 · TA获得超过371个赞
知道小有建树答主
回答量:137
采纳率:0%
帮助的人:151万
展开全部
楼上几位好像都不正确。
实际上这是泛型方法的应用

public <T> List<T> getList(Class<T> clazz){
return null ;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友abde853
推荐于2016-01-25 · TA获得超过1782个赞
知道小有建树答主
回答量:524
采纳率:0%
帮助的人:453万
展开全部
这样不能啊!
List<Integer>和List<String>是不同的返回类型!
你倒是可以返回List<Object>但是后期用的话要cast!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wml199039
2010-11-22 · 超过25用户采纳过TA的回答
知道答主
回答量:42
采纳率:0%
帮助的人:53.4万
展开全部
比如
public List<User> a(Class class){
List<User> list = .....;
return list;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
青山不改
2019-03-05
知道答主
回答量:1
采纳率:0%
帮助的人:766
展开全部
参考这段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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式