對於在泛型中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>是參數化類型,把原始類型傳遞給參數化類型這個符合條件,所以通過編譯