0

我正在尝试通过执行将 int 类型的数组转换为 List

List<Integer> endingRoutesBusStopsList = Arrays.asList(endingRoutesBusStops);

但由于某种原因,我不断收到错误消息

Type mismatch: cannot convert from List<int[]> to List<Integer>

我不明白问题是什么。

我知道做

List<int[]> endingRoutesBusStopsList = Arrays.asList(endingRoutesBusStops);

将解决错误,但我不能以我想要的方式使用它。

有人有想法么?

4

3 回答 3

2

这是由int[]不同于的事实引起的Integer[]。自动装箱不适用于Arrays。

于 2013-05-03T14:17:37.167 回答
2

问题是因为“int []”是一个对象,

Arrays.asList(T...) 获取通用可变参数,这意味着它将“int[]”视为“Object”(数组 int[] 和 Integer 的通用超类是 Object)

这样从 asList 方法的角度来看,您不会传递一个整数数组,而是传递一个 object 。

无论如何,您应该进行从 int 到包装 Integer 的隐式转换。建议明确说明。

于 2013-05-03T14:19:39.957 回答
0

我们缺少更多您的代码,但总的来说,让我尝试用代码回答:

这有效:

Integer[] arrayOfInt = { Integer.valueOf(0), Integer.valueOf(1) };
List<Integer> listOfInt = Arrays.asList(arrayOfInt);

这也有效,因为原始“1”被自动装箱为 Integer 对象:

Integer[] arrayOfInt = { 1, 2, 3, 4 };
List<Integer> listOfInt = Arrays.asList(arrayOfInt);

最后,这是行不通的,因为 int[] 不能自动装箱为 Integer[]:

int[] arrayOfInt = { 1, 2, 3, 4 };
List<Integer> listOfInt = Arrays.asList(arrayOfInt);

更新:这来自与@MichaelBorek 讨论中的评论。此示例重复尝试相同的代码,无论是否自动装箱。自动装箱的成本似乎是使用它的代码比直接使用 Objects 的代码花费的时间长5 倍。

于 2013-05-03T14:23:43.703 回答