我错过了什么,或者varargs打破Arrays.asList?

private void activateRecords(long[] stuff) { ... api.activateRecords(Arrays.asList(specIdsToActivate)); } 

不应该调用Arrays.asList返回Long s的列表吗? 而是返回List

 public static  List asList(T... a) 

方法签名与结果一致,varargs将整个数组抛出到列表中。 它与new ArrayList(); list.add(myArray)相同new ArrayList(); list.add(myArray) new ArrayList(); list.add(myArray)是的,我知道它的意思是这样使用: Arrays.asList(T t1, T t2, T t3)

我想我得到的是,而不是varargsforms,为什么我不能只使用我的旧asList方法(至少我认为这是它以前的工作方式),它将获取内容并将它们单独放入一个列表? 这样做还有其他干净的方法吗?

那是因为long []和Long []是不同的类型。

在第一种情况下,T是long [],在第二种情况下T是Long。

如何解决这个问题? 首先不要使用long []?

无法在arrays上进行自动装箱。 你被允许这样做:

 private List array(final long[] lngs) { List list = new ArrayList(); for (long l : lngs) { list.add(l); } return list; } 

要么

 private List array(final long[] lngs) { List list = new ArrayList(); for (Long l : lngs) { list.add(l); } return list; } 

(注意可迭代类型不同)

例如

 Long l = 1l; 

但不是

 Long[] ls = new long[]{1l}