错误的数据类型 - 泛型

时间:2012-11-27 22:32:31

标签: java generics

在下面的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 个答案:

答案 0 :(得分:5)

这不会编译,因为ArrayToArrayList需要一个数组和一个相同类型的数组列表E

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

您注释掉的示例尝试使用StringArrayList Integer数组调用它。

以下编译:

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

答案 1 :(得分:2)

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

在此方法中,传递的ArrayList类型应与(E)

相同类型 相同类型

因此,如果您要传递ArrayList<Integer>,则必须传递Integer[],因为您为这两个传递了相同的类型E

现在在这个调用中: -

ArrayToArrayList(strArray, lst);

您的lst类型为ArrayList<Integer>strArrayString[],因此有type mismatch