2012-11-27 84 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