在下面的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);
抛出异常?
如果方法接受泛型数据,为什么它接受整数数组但不接受字符串数组?
答案 0 :(得分:5)
这不会编译,因为ArrayToArrayList
需要一个数组和一个相同类型的数组列表(E
):
public static <E> void ArrayToArrayList(E[] a, ArrayList<E> lst) {
您注释掉的示例尝试使用String
和ArrayList
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>
,strArray
为String[]
,因此有type mismatch
。