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

这个对 Arrays.asList 的调用不应该返回一个Longs 列表吗?相反,它返回一个List<long[]>

public static <T> List<T> asList(T... a)

方法签名与结果一致,可变参数将整个数组扔到列表中。它new ArrayList(); list.add(myArray) 与 是的,我知道它应该像这样使用:Arrays.asList(T t1, T t2, T t3)

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

4

2 回答 2

7

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

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

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

于 2008-11-13T00:42:57.793 回答
5

无法对数组进行自动装箱。您可以这样做:

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

或者

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

(注意可迭代类型不同)

例如

Long l = 1l;

但不是

Long[] ls = new long[]{1l}
于 2008-11-13T00:55:58.890 回答