在课堂上,我们创建了两个相同的方法,这些方法仅在参数方面有所不同:
public class Lists {
public static <T> List<T> toListArray(T[] arr){
List<T> list = new ArrayList<T>();
for (T elt : arr)
list.add(elt);
return list;
}
public static <T> List<T> toListVarargs(T... arr){
List<T> list = new ArrayList<T>();
for (T elt : arr)
list.add(elt);
return list;
}
public static void main(String[] args) {
List<Object> list = Lists.<Object>toListVarargs(1, "two");
list = Lists.<Object>toListVarargs();
list = Lists.<Object>toListArray(1,"two");//<---Does not compile
list = Lists.<Object>toListArray();//<---Does not compile
}
}
为什么主编译中的前两个字符串和后两个字符串没有?
答案 0 :(得分:2)
因为toListArray需要一个数组作为参数。
答案 1 :(得分:2)
以下内容无法编译:
list = Lists.<Object>toListArray(1,"two");//<---Not compiles
list = Lists.<Object>toListArray();//<---Not compiles
因为toListArray()
需要 正好一个 参数(并且它必须是一个数组)。你试图传递0或2个参数,因此错误(只有varargs允许任意数量的参数)
答案 2 :(得分:1)
最后两个不能编译,因为编译器需要一个数组作为方法的输入参数(toListArray
)。相比之下,toListVarargs
基于varargs,因此它可以采用任何类型的零个,一个或多个参数(因为您使用了Object
类型)。