2012-11-27 82 views
3

在下面的Java代碼:數據類型錯誤 - 泛型

import java.util.*; 

public class TestGenericMethod { 

public static <E> void ArrayToArrayList(E[] a, ArrayList<E> lst) { 
    for (E e : a) lst.add(e); 
} 

public static void main(String[] args) { 
    ArrayList<Integer> lst = new ArrayList<Integer>(); 
    Integer[] intArray = {55, 66}; // autobox 
    ArrayToArrayList(intArray, lst); 

    for (Integer i : lst) System.out.println(i);  
    String[] strArray = {"one", "two", "three"}; 

    //ArrayToArrayList(strArray, lst); // Compilation Error 
} 
} 

有人能解釋我如何編譯器知道這行:

ArrayToArrayList(strArray, lst); 

拋出一個異常?

如果該方法接受通用類型的數據,爲什麼它接受整數數組而不是字符串數組?

回答

2
public static <E> void ArrayToArrayList(E[] a, ArrayList<E> lst) 

在這種方法中,ArrayList傳遞的類型應該是同一類型爲您的陣列(E)的類型

所以,如果你是路過ArrayList<Integer>,你必須通過Integer[],因爲你已經使用了相同類型的E

現在,在這個調用: -

ArrayToArrayList(strArray, lst); 

lstArrayList<Integer>型的,和你的strArrayString[],所以有type mismatch

5

這並不編譯,因爲ArrayToArrayList預計數組和相同類型的數組列表E

public static <E> void ArrayToArrayList(E[] a, ArrayList<E> lst) { 

你註釋掉的示例嘗試用String數組來調用它, IntegerArrayList

下確實編譯:

 String[] strArray = {"one", "two", "three"}; 
     ArrayList<String> strLst = new ArrayList<String>(); 
     ArrayToArrayList(strArray, strLst); 
+0

感謝。我沒有期待這麼快速的迴應。現在對我來說更有意義。 – coder