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);

抛出异常?

如果该方法接受通用类型的数据,为什么它接受 Integer 数组而不接受 String 数组?

4

2 回答 2

5

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

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

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

以下确实编译:

      String[] strArray = {"one", "two", "three"};
      ArrayList<String> strLst = new ArrayList<String>();
      ArrayToArrayList(strArray, strLst);
于 2012-11-27T22:35:21.027 回答
2
public static <E> void ArrayToArrayList(E[] a, ArrayList<E> lst)

在此方法中,ArrayList传递的类型应与您的数组类型相同(E)

因此,如果您要通过ArrayList<Integer>,则必须通过Integer[],因为您对它们都使用了相同的类型E

现在在这个调用中: -

ArrayToArrayList(strArray, lst);

your lstis 的类型ArrayList<Integer>,并且 your strArrayis String[],所以有一个type mismatch.

于 2012-11-27T22:34:54.820 回答