Arrays.asList() 不能正常工作?

2022-08-31 14:16:44

我有一个浮点数[],我想得到一个具有相同元素的列表。我可以做一个接一个地添加它们的丑陋的事情,但我想使用Arrays.asList方法。但是有一个问题。这有效:

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

但事实并非如此。

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

asList方法接受一个varargs参数,据我所知,该参数是数组的“简写”。

问题:

  • 为什么第二段代码返回 一个,但不是 。List<int[]>List<int>

  • 有没有办法纠正它?

  • 为什么自动装箱在这里不起作用;即 自?int[]Integer[]


答案 1

在Java中没有这样的东西 - 泛型不支持原语。List<int>

自动装箱仅对单个元素进行,而不对基元数组进行。

至于如何纠正它 - 有各种各样的库,其中包含大量用于执行此类操作的方法。没有办法解决这个问题,我认为在JDK中没有任何办法让它变得更容易。有些会将基元数组包装在包装器类型的列表中(以便在访问时进行装箱),有些则会循环访问原始数组以创建独立的副本,并随心所欲地装箱。确保您知道自己正在使用哪种。

(编辑:我一直认为一个的起点是不可谈判的。如果你能从一个开始,那么你就远离:)int[]Integer[]

举个例子,一个辅助库,为了插入番石榴,有com.google.common.primitive.Ints.asList


答案 2

怎么样?

Integer[] ints = new Integer[] {1,2,3,4,5};
List<Integer> list = Arrays.asList(ints);