3 回答

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊
參考這段List克隆代碼。返回的List<T>中T為入?yún)⒌腃lass<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;
}

TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
主要是一個(gè)編譯期的檢查,也避免了我們代碼中的強(qiáng)制轉(zhuǎn)換,比較經(jīng)典的用法有泛型DAO,泛型Page的DTO。
現(xiàn)在我要說(shuō)的是一個(gè)挺有趣但是貌似還不是太多的人在代碼中使用的方法,前段時(shí)間用guava和op4j的時(shí)候發(fā)現(xiàn)這樣的用法,看看了源碼,也是很簡(jiǎn)單的。
比如guava中創(chuàng)建集合的方法 List<xx> list = Lists.newArrayList(),這個(gè)代替了我們傳統(tǒng)的 new ArrayList<xx>,為什么在=的右邊不需要泛型了呢,我們看看源碼。
[java] view plaincopy
public static <E> ArrayList<E> newArrayList() {
return new ArrayList<E>();
}
返回類(lèi)型中帶有泛型E,并且這個(gè)泛型的來(lái)源在 static和 ArrayList之間的位置,我自己的理解是這個(gè)就和=左邊的一致,可能說(shuō)的不夠?qū)I(yè)但是意思應(yīng)該就這樣。
于是我就依樣畫(huà)葫蘆在自己的代碼中也用了起來(lái)。
我要做的是一個(gè)仿httpsession機(jī)制的自定義協(xié)議是session。在httpsession.getAttribute方法返回的是一個(gè)
Object,然后我們?cè)兕?lèi)型轉(zhuǎn)換?,F(xiàn)在我用返回類(lèi)型泛型來(lái)優(yōu)化這個(gè)代碼,以下是我自定義協(xié)議session的getAttribute的代碼。
[java] view plaincopy
@SuppressWarnings("unchecked")
public <E> E getAttribute(String key) {
return (E) map.get(key);
}
調(diào)用代碼
[java] view plaincopy
Boolean isFirst = session.getAttribute("first");
在httpsession中我們則要這么寫(xiě)
[java] view plaincopy
Boolean isFirst = (Boolean)session.getAttribute("first");
泛型的用法還有很多,有新的心得再補(bǔ)充更新

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
比如
public List<User> a(Class class){
List<User> list = .....;
return list;
}
添加回答
舉報(bào)