Arrays.asList(int )如何返回List ?
在做简单的程序时我注意到了这个问题。
int[] example = new int[10]; List exampleList = Arrays.asList(example);// Compilation error here
返回编译错误,因为cannot convert from List to List
。 但是java中不允许使用List
,为什么会出现这种编译错误?
我不是在质疑autoboxing,我只是想知道Arrays.asList
如何返回List
。
asList实现是
public static List asList(T... a) { return new ArrayList(a); }
所以它将int []视为T就是为什么会发生这种情况。
在Arrays.asList
没有对底层int进行自动自动装箱。
-
int[]
实际上是一个对象,而不是一个原始对象。 -
这里
Arrays.asList(example)
返回List
。List
确实是无效的语法。 -
你可以使用:
List
exampleList = Arrays.asList(ArrayUtils.toObject(array)); 使用Apache Commons
ArrayUtils
。
Arrays.asList(...)
完美地将对象数组转换为这些对象的列表。
此外, Arrays.asList(...)
在Java 5中使用varag构造定义,或者,按顺序,它可以接受未定义数量的参数,在这种情况下,它将所有这些参数视为数组的成员和然后返回包含这些元素的List
实例。
List
这意味着您可以使用单个元素创建列表:
List
由于Java中不允许使用List
,因此当您使用int[]
数组作为Arrays.asList
参数时,它会将其视为列表的单个元素而不是int
数组。 那是因为数组本身是Java中的对象,而int
(和任何其他原语)不是。
因此,在转换基元数组时, Arrays.asList
将尝试返回基本数组的列表:
List intArrayList = Arrays.asList(new int[]{ 1, 2, 3 });
签名
涉及generics类型T
generics类型的范围仅涵盖引用类型(包括数组类型),但不包括基本类型。 因此,在使用int[] ints
调用Arrays.asList(ints)
, T
只能解析为int[]
。
在更高的层次上, Arrays.asList
的目的是提供数组的列表视图 。 这意味着数组保持不变,其元素通过实现List
的对象可用。 但是, List
s只能包含对象,而您的数组包含原始int
。 这使得数组无法通过List
接口公开。
无论如何,如果您正在寻找一个优雅的语法来创建一个Integers
列表,请编写Arrays.asList(1,2,3)
。
数组是java中的对象,而不是基本类型。 请注意,它表示List
(int-arrays List
),而不是List
。