gpt4 book ai didi

java - Java 中的 Varargs 到 ArrayList 问题

转载 作者:行者123 更新时间:2023-12-01 19:05:58 24 4
gpt4 key购买 nike

我不明白为什么以下不起作用:

public void doSomething(int... args){
List<Integer> broken = new ArrayList<Integer>(Arrays.asList(args))
}

据我了解,编译器将“int...args”转换为数组,因此上面的代码应该可以工作。

我没有工作,而是得到:

cannot find symbol symbol: constructor ArrayList(java.util.List<int[]>) location: class java.util.ArrayList<java.lang.Integer>

这很奇怪。我不是将数组添加到数组列表,而是将列表中的每个元素添加到数组列表。这是怎么回事?

最佳答案

Java 无法自动装箱数组,只能自动装箱单个值。我建议将您的方法签名更改为

public void doSomething(Integer... args)

然后,自动装箱将在调用 doSomething 时进行,而不是在调用 Arrays.asList 时尝试(并失败)。

发生的情况是,Java 现在会在传递给函数时自动装箱每个单独的值。您之前尝试做的是,通过将 int[] 传递给 Arrays.asList(),您要求该函数执行自动装箱。

但是自动装箱是由编译器实现的——它发现您需要一个对象但传递了一个基元,因此它会自动插入必要的代码以将其转换为适当的对象。 Arrays.asList() 函数已编译并需要对象,编译器无法将 int[] 转换为 Integer[] .

通过将自动装箱移至函数的调用方,您已经解决了该问题。

关于java - Java 中的 Varargs 到 ArrayList 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59555121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com