Java泛型應用淺析
Java泛型,餓,這個東西嗎,嚼一下還是有必要的。有啥用呢?小弟曾覺着吧,吹牛是條不錯的出路,但沒一次沒有不吹破的。(繞吧^_^)
詳解呢,沒啥必要了,參見附件解壓後Java泛型詳解.txt(引用網址…小弟知錯了T^T)。
一、泛型概念簡述
泛型嗎,就是泛泛的類型,指代某一種類型的符號。例如Map<K,V>,K、V指代某種類型一樣。而我們呢,在內部則直接用K、V來進行處理。
這樣有啥好處呢?1.消除強制類型轉換;2.附加類型檢查,避免錯誤類型;3.確保Java類型安全(這纔是主要目的)等。相信用過集合框架的都有類似體會。
二、泛型基礎特徵
1)在定義泛型類或聲明泛型類的變量時,使用尖括號來指定形式類型參數。例如java.util.Map接口的定義:
public interface Map<K, V> {
public void put(K key, V value);
public V get(K key);
}
命名方式約定以大寫的單個字母名稱作爲類型參數。常見泛型推薦的名稱:K,鍵;V,值;E,異常類;T,泛型。
2)泛型不是協變的,即無法向上轉型。不同於Object obj = new String("str"),以下方式是錯誤的:
List<String> strList = new ArrayList<String>();
List<Object> objList = strList; // invalid
如果第二行寫成List objList = strList,可以通過編譯但會出現警告(類型不安全)。那如何表示泛型爲一個通用泛型,就是定義個尖括號內可以放任意類型的泛型呢?這是就要使用類型通配符了。
3)類型通配符,’?’表示。可以聲明一個List<?>,作爲任何泛型List的父類型。即List<?> objList = strList,這樣就沒啥問題了。
4)受限泛型,即給泛型定義上下限。簡單說,就是類型參數必須是某類及其子類(上限),或者是某類及其父類(下限)。
怎麼弄捏,例如List爲傳入參數,限定類型參數必須爲Number,如下:
public void fun(List<? extends Number> list) {…}
上述List只接收Number及Number的子類。另一種方式,只接收Integer及其父類,則如下:public void fun(List<? super Integer> list) {…}。
三、泛型簡單應用
OK,現在開始本文最切題的章節啦,各位看官還請拭目以待^_^!
……
參見附件-_-!
附個內容表吧:
包名
|
樣例名
|
備註
|
org.join.generic.one
|
樣例1:泛型類
|
一個和多個類型參數的泛型類
|
org.join.generic.two
|
樣例2:通配符
|
輸出了泛型類成員變量類型
|
org.join.generic.three
|
樣例3:受限泛型
|
extends、super
|
org.join.generic.four
|
樣例4:泛型接口
|
泛型接口及其實現
|
org.join.generic.five
|
樣例5:泛型方法
|
返回泛型示例、統一參數類型
|
org.join.generic.six
|
樣例6:泛型數組
|
泛型數組使用
|
org.join.generic.seven
|
樣例7:泛型嵌套
|
Map&List嵌套
|
四、後記
手冷,嗚嗚…
本文出自 “-_--___---_-” 博客,請務必保留此出處http://vaero.blog.51cto.com/4350852/770135