java返回泛型
㈠ 對java泛型的理解
泛
型(Generic type 或者 generics)是對
簡單的理解,就是對類型的參數化,比如我們定義一個類屬性或者實例屬性時,往往要指定具體的類型,如Integer、Person等等,
但是如果使用了泛型,我們把這些具體的類型參數化,用一個廣泛的可以表示所有類型的「類型」T來定義,那這個T就是泛型的表示。
可以在集合框架(Collection framework)中看到泛型的動機。例如,Map 類允許您向一個 Map 添加任意類的對象,即使最常見的情況是在給定映射(map)中保存某個特定類型(比如 String)的對象。
因為 Map.get() 被定義為返回 Object,所以一般必須將 Map.get() 的結果強制類型轉換為期望的類型,如下面的代碼所示:
[java]view plainprint?
Mapm=newHashMap();
m.put("key","value");
Strings=(String)m.get("key");
- 要讓程序通過編譯,必須將 get() 的結果強制類型轉換為 String,並且希望結果真的是一個 String。如果map中保存了的不是 String 的數據,則上面的代碼將會拋出 ClassCastException。
㈡ java 方法中如何在返回類型使用泛型
主要是一個編譯期的檢查,也避免了我們代碼中的強制轉換,比較經典的用法有泛型DAO,泛型Page的DTO。
現在我要說的是一個挺有趣但是貌似還不是太多的人在代碼中使用的方法,前段時間用guava和op4j的時候發現這樣的用法,看看了源碼,也是很簡單的。
比如guava中創建集合的方法 List<xx> list = Lists.newArrayList(),這個代替了我們傳統的 new ArrayList<xx>,為什麼在=的右邊不需要泛型了呢,我們看看源碼。
[java] view plain
public static <E> ArrayList<E> newArrayList() {
return new ArrayList<E>();
}
返回類型中帶有泛型E,並且這個泛型的來源在 static和 ArrayList之間的位置,我自己的理解是這個就和=左邊的一致,可能說的不夠專業但是意思應該就這樣。
於是我就依樣畫葫蘆在自己的代碼中也用了起來。
我要做的是一個仿httpsession機制的自定義協議是session。在httpsession.getAttribute方法返回的是一個
Object,然後我們再類型轉換。現在我用返回類型泛型來優化這個代碼,以下是我自定義協議session的getAttribute的代碼。
[java] view plain
@SuppressWarnings("unchecked")
public <E> E getAttribute(String key) {
return (E) map.get(key);
}
調用代碼
[java] view plain
Boolean isFirst = session.getAttribute("first");
在httpsession中我們則要這么寫
[java] view plain
Boolean isFirst = (Boolean)session.getAttribute("first");
泛型的用法還有很多,有新的心得再補充更新
㈢ Java 泛型 Class
給你順序解釋下泛型的意思哈:
<T>:定義一個泛型
T :定義方法返回的類型是之前定義的泛型類型
Class<? extends T> 這個是定義參數的類型為Class, 但是這個Class必須是和之前定義的泛型有繼承關系的。?表示任意類的Class,不過後面跟了extends 表明了條件。
㈣ JAVA中的泛型用法一種: <T> 返回值用法。
1、對於泛型方法來說,是可以接收不同類型的參數,比如下圖,使用泛型來操作List集合,然後向List中添加一條數據,看是否可以添加成功,創建泛型方法如圖所示。
㈤ java泛型方法可以返回 List<T> 嗎
可以!!返回值必須是你定義的類型包含的泛型也必須一樣