使用泛型的注意事項

   對於在泛型中ArrayList<E>類定義和ArrayList<Integer>類引用中涉及如下術語:

          (1)    整個稱爲ArrayList<E>泛型類型

           (2) ArrayList<E>中的E稱爲類型變量或類型參數

           (3)整個ArrayList<Integer>稱爲參數化的類型  

          (4)ArrayList<Integer>中的Integer稱爲類型參數的實例或實際類型參數

           (5)ArrayList<Integer>中的<>念着typeof

            (6)ArrayList稱爲原始類型

   參數化類型與原始類型的兼容性:

          參數化類型可以引用一個原始類型的對象,編譯報告警告,例如, Collection<String> c = new Vector();
          原始類型可以引用一個參數化類型的對象,編譯報告警告,例如, Collection c = new Vector<String>();//原來的方法接受一個集合參數,新的類型也要能傳進去

   參數化類型不考慮類型參數的繼承關係:

           Vector<String> v = new Vector<Object>(); //錯誤!///不寫<Object>就是對的

              因爲從v中取出的對象當作String用,而v實際指向的對象中可以加入任意的類型對象
          Vector<Object> v = new Vector<String>(); //也錯誤!

            因爲向v中加入任意的類型對象,而v實際指向的集合中只能裝String類型的對象

編譯器不允許創建泛型變量的數組。即在創建數組實例時,數組的元素不能使用參數化的類型,例如,下面語句有錯誤:
Vector<Integer> vectorList[] = new Vector<Integer>[10];


以下兩句應用也是正確的

Vector v1 = new Vector<String>();

Vector<Object> v = v1;

因爲第一個行是把一個參數化的類型給一個原始類型,第二行這裏把一個原始類型給一個參數化的類型,編譯器是一個嚴格按照語法檢查的工具,它是一行一行地去翻譯代碼的,檢查到Vector<Object> v = v1;的時候發現v1是原始類型,Vector<Object>是參數化類型,把原始類型傳遞給參數化類型這個符合條件,所以通過編譯
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章