亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有什么方法可以在返回類型使用泛型?關于Java的相關問題

有什么方法可以在返回類型使用泛型?關于Java的相關問題

慕容3067478 2021-05-17 18:10:18
例如public List a(Class clazz){return null;}讓存儲是clazz類型的List返回List<T> T不能是限定 而是clazz類型
查看完整描述

3 回答

?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

參考這段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;
}

查看完整回答
反對 回復 2021-05-23
?
婷婷同學_

TA貢獻1844條經驗 獲得超8個贊

主要是一個編譯期的檢查,也避免了我們代碼中的強制轉換,比較經典的用法有泛型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,然后我們再類型轉換?,F在我用返回類型泛型來優化這個代碼,以下是我自定義協議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");

泛型的用法還有很多,有新的心得再補充更新



查看完整回答
反對 回復 2021-05-23
?
慕后森

TA貢獻1802條經驗 獲得超5個贊

比如
public List<User> a(Class class){
List<User> list = .....;
return list;
}

查看完整回答
反對 回復 2021-05-23
  • 3 回答
  • 0 關注
  • 276 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號