为什么我们不能将 ArrayList<Integer> 传递给带有 (Integer...) 参数的方法?

Why can't we pass ArrayList<Integer> to a method with (Integer...) parameter?

我正在尝试这样做 Java 如何编程任务:“编写一个计算乘积的应用程序 使用可变长度参数列表传递给方法 'product' 的一系列整数。

我收到错误消息,指出类型 VarLenArgumentList 中的方法 product(Integer...) 不适用于 参数(ArrayList)。为什么会这样,如果 Java 将可变长度参数列表视为数组? ArrayList 不是数组吗?

完成任务的另一种方法是什么?

Scanner keyboard = new Scanner(System.in);
int flag = 0;
ArrayList<Integer> intArray = new ArrayList<>();

do
{
    System.out.print("Enter a positive integer or '-1' to quit:" );
    int input = keyboard.nextInt();
    intArray.add(input);

} while (flag != -1);

product(intArray); 
}

public static int product (Integer... numbers) 
{
    int total = 0;

    for (Integer element : numbers)
        total *= element;

    return total;
}

Integer... 参数接受任意数量的 Integer 对象,或数组 Integer[]。由于 ArrayList<Integer> 不是 Integer[],因此不被接受。

ArrayList 不是一个数组,它是一个 Collection,而 java 中的数组是一个不同的对象。

不过,您可以使用 toArray(T) 方法轻松地将 ArrayList 转换为数组。但请注意,它将是一个不同的对象,这主要在您只想从集合中读取而不是写入时很有用。

What is another way of completing the task?

您可以将整数列表传递给该方法。

 public static int product (List<Integer> integerList) 
    {
    Integer total = 0;

    for (Integer element : integerList)
        total *= element;

    return total;
    }