java如何创建数组。asList(int[])可以返回List<int[]>?
在做简单的程序时,我注意到了这个问题
int[] example = new int[10];
List<Integer> exampleList = Arrays.asList(example);// Compilation error here
编译错误返回为cannot convert from List<int[]> to List<Integer>
。但是List<int>
在java中是不允许的,那么为什么会出现这种编译错误呢
我不是在质疑自动装箱,我只是想知道Arrays.asList
如何返回List<int[]>
asList的实现是
public static <T> List<T> asList(T... a) {
return new ArrayList<T>(a);
}
所以它将int[]视为T,这就是为什么会发生这种情况
# 1 楼答案
在
Arrays.asList
中没有对底层int进行自动装箱int[]
实际上是一个对象,而不是原语这里
Arrays.asList(example)
返回List<int[]>
List<int>
确实是无效语法你可以使用:
列表<;整数>;exampleList=数组。asList(ArrayUtils.toObject(array))
使用Apache Commons
ArrayUtils
# 2 楼答案
Arrays.asList(...)
可以完美地将对象数组转换为这些对象的列表也有,{{CD1}}是用Valg构造定义在java 5中,或者,按照顺序,它可以接受一个未定义的参数数量,在这种情况下,它将把所有这些参数看作数组的成员,然后返回包含这些元素的^ {< CD3>}实例。p>
这意味着您可以使用单个元素创建列表:
因为在java中不允许^ {CD4>},当使用^ {< CD5>}数组作为参数{{CD6>}时,它将被认为是列表的单个元素而不是^ {< CD7>}的数组。这是因为数组本身在Java中是对象,而
int
(以及任何其他原语)则不是因此,在转换基元数组时,
Arrays.asList
将尝试返回基元数组列表: