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巢狀
 
四、後記
         手冷,嗚嗚…