4

为什么以下不返回整数列表?

int[] ints = new int[] { 1, 2, 3, 4, 5 };
List<Integer> intsList = Arrays.asList(ints); //compilation error

但取而代之的是一个列表int[]

虽然这

String[] strings = new String[] { "Hello", "World" };
List<String> stringsList = Arrays.asList(strings);

返回 的列表String。我猜它失败是因为它是一组原语,但为什么呢?以及我如何实际返回int.

4

3 回答 3

7

这是因为Arrays.asList(new int[] { 1, 2, 3, 4, 5 })将创建一个List<int[]>包含一个项目,而不是一个List<Integer>包含五个项目。

但是请注意,这将达到您的预期:

List<Integer> intsList = Arrays.asList(1, 2, 3, 4, 5);

您的其他选择是:

  • 首先创建一个Integer[],或
  • 在循环中填充您的列表
于 2013-06-04T18:22:35.423 回答
3

该方法定义为: public static <T> List<T> asList(T... a)

因此,在您的第一种情况下,Tint[]将单个对象传递给方法(即数组),因此它返回一个int[].

我认为您弄错了asList(1, 2, 3, 4, 5)(即 5 项)

于 2013-06-04T18:25:24.863 回答
2

TinList<T>必须是 的某个子类型,java.lang.Objectint不是。唯一的其他解释是,正如我们使用...的那样,您提供了一个数组int[],即一个int[][]. 所以你得到List<int[]>.

String是 的子类型Object,因此可以按预期工作。这也是在 J2SE 5.0 中引入可变参数之前它可以工作的唯一方法。通常,现有代码的解释不应在语言版本之间改变。

现在,如果你想要一个,List<Integer>你可以通过并装箱每个整数。如果你的程序中有很多这些元素,那么内存可能是个问题。你可能想使用一个第三方库,它紧凑地支持 aList<Integer>和 a int[],或者只是坚持使用数组作为基元。不幸的是,Java 不支持值类型。

于 2013-06-04T18:30:12.033 回答