2008-11-13 79 views
3
private void activateRecords(long[] stuff) { 
    ... 
    api.activateRecords(Arrays.asList(specIdsToActivate)); 
    } 

不應該對Arrays.asList的這個調用返回一個列表Long s嗎?相反,它返回一個List<long[]>我錯過了什麼,或者做了可變參數Arrays.asList?

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

的方法簽名的結果是一致的可變參數拋出整個數組到列表中。這是一樣new ArrayList(); list.add(myArray)是的,我知道它的意思是這樣使用:Arrays.asList(T t1, T t2, T t3)

我想我得到的,是代替可變參數的形式,爲什麼我不能只是有我的老asList方法(至少我認爲這是它的工作原理),它會把內容放入一個列表中並將它們分別放入列表中?任何其他乾淨這樣做的方式?

回答

7

這是因爲long []和Long []是不同的類型。

在第一種情況下T是long [],在第二個T中是long。

如何解決這個問題?首先不要使用long []?

+1

謝謝!我現在得到它,但與供應商遺留應用程序的工作不給我的選擇「[不]使用long []在第一位」 – oreoshake 2008-11-13 00:48:10

+0

然後將long []轉換爲Long []。我知道,它很愚蠢。 – Pyrolistical 2008-11-13 00:49:35

5

Autoboxing無法在陣列上完成。你被允許這樣做:

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}