为什么以下不返回整数列表?
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
列表。
答案 0 :(得分: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[]
,或答案 1 :(得分:3)
该方法定义为:
public static <T> List<T> asList(T... a)
所以在你的第一种情况下,T
是int[]
并且你将一个对象传递给方法(即数组),因此它返回一个int[]
的列表。
我认为你误认为asList(1, 2, 3, 4, 5)
(即5项)
答案 2 :(得分:2)
T
中的List<T>
必须是java.lang.Object
的某个子类型,int
不是。只有其他解释是,正如我们使用...
所提供的int[]
数组,即int[][]
。所以你得到List<int[]>
。
String
是Object
的子类型,因此按预期工作。也是在J2SE 5.0中引入varargs之前可以工作的唯一方法。通常,现有代码的解释不应在语言版本之间发生变化。
现在,如果你想要一个List<Integer>
,你可以通过并选中每个整数。如果你的程序中有很多这些元素,那么内存可能是一个问题。您可能希望使用第三方库,该第三方库使用List<Integer>
紧凑地备份int[]
,或者只使用基元数组。遗憾的是,Java不支持值类型。