本文目錄一覽:
java中Dao中用泛型
貼上你IA類的代碼,泛型在java裡面是一種語法糖,作用簡單可以理解為讓開發在編譯階段能發現相關的錯誤 而不是讓錯誤在運行階段才被發現 如ListString 則list裡面只能放入String類型,否則編譯都通不過,你可以搜搜語法糖的作用,實際泛型在形成的class文件中還是會被擦除
java 方法中如何在返回類型使用泛型
主要是一個編譯期的檢查,也避免了我們代碼中的強制轉換,比較經典的用法有泛型DAO,泛型Page的DTO。
現在我要說的是一個挺有趣但是貌似還不是太多的人在代碼中使用的方法,前段時間用guava和op4j的時候發現這樣的用法,看看了源碼,也是很簡單的。
比如guava中創建集合的方法 Listxx list = Lists.newArrayList(),這個代替了我們傳統的 new ArrayListxx,為什麼在=的右邊不需要泛型了呢,我們看看源碼。
[java] view plaincopy
public static E ArrayListE newArrayList() {
return new ArrayListE();
}
返回類型中帶有泛型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”);
泛型的用法還有很多,有新的心得再補充更新
Java中的泛型的問題?
public BaseDao(){
Class clazz=this.getClass(); //通過當前對象(this)獲取當前類
clazz.getGenericSuperclass(); //返回當前類的父類的Type
//轉換成有泛型的ParameterizedType類
ParameterizedType parameterizedType=(ParameterizedType)clazz.getGenericSuperclass();
//上面三句其實就是為了獲取BaseDao類本身
Type[] types = parameterizedType.getActualTypeArguments();
this.type=(ClassT)types[0];
//上面兩句是獲取運行期的泛型類型,返回給當前對象(this)的type屬性
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/276163.html