2013-03-19 25 views
2

我有一個方法,用於將數組轉換爲一個ArrayList如下:通用方法來轉換的陣列,以ArrayList的

public static <T> ArrayList<T> getArrayList(T[] a){ 
     ArrayList<T> retList = new ArrayList<T>(); 
     for (T i : a){ 
      retList.add(i); 
     } 
     return retList; 
    } 

這對於對象數組如正常工作:

String[] arr = {"String","'nother string","etc"}; 
    ArrayList<String> stringList = initArrayList(arr); 

但不與原始陣列:

int[] arr2 = {1,2,3}; 
    ArrayList<Integer> intList = initArrayList(arr2); //Compiler is insulted by this. 

我想我必須將數組轉換爲整數數組如果我想方法工作,但是有沒有辦法讓這個方法能夠處理這個問題呢?

Java教程網站有以下幾點:

static <T> void fromArrayToCollection(T[] a, Collection<T> c) { 
     for (T o : a) { 
      c.add(o); // Correct 
     } 
    } 

這會工作,但我想的方法來創建的ArrayList。另外,這僅僅是爲了我自己的娛樂,所以Collection的類型並不重要,我在編寫方法時只使用了ArrayList。

感謝

+0

不,實際上沒有。原始陣列和泛型不會混合。 – 2013-03-19 23:53:58

+1

看看這個http://stackoverflow.com/questions/754294/convert-an-array-of-primitive-longs-into-a-list-of-longs – 2013-03-19 23:58:21

回答

2

沒有通用的方法可以處理原語,因爲原語不能是泛型類型。你能進來純Java最接近的是重載getArrayListint[] ...

public static ArrayList<Integer> getArrayList(int[] a){ 
    ArrayList<Integer> retList = new ArrayList<Integer>(); 
    for (int i : a){ 
     retList.add(i); 
    } 
    return retList; 
} 

將打你int你。它不是通用的,你需要爲每個原始數組類型重載一個新的重載,但這是我能想到的最接近的解決方案。

+0

有一種感覺可能是這種情況。有點糟糕,但是哦。謝謝。 – Kraiden 2013-03-20 00:16:17

+0

+1,並注意你可以通過使用'new ArrayList (a.length)'來獲得'int ...'的可變性和初始化容量。 – 2013-03-20 00:48:28

1

有準備使用方法java.util.Arrays.asListcom.google.common.primitives.Ints.asList

+1

'Arrays.asList'返回一個'List' ,而不是'ArrayList'。另外,即使'List list = Arrays.asList(1,2,3);'compiles,'List list = Arrays.asList(new int [] {1,2,3)};'不會編譯。有了數組參數,編譯器會認爲返回類型是'List '。 – rgettman 2013-03-20 00:09:47

+0

@rgettman是對的。只有番石榴的'Ints.asList'才能正常工作。看到我的答案[這裏](http://stackoverflow.com/questions/10676185/what-is-wrong-here-i-get-a-java-lang-classcastexception-error-but-i-cant-see-w例如,/ 10676223#10676223)。 – 2013-03-20 00:45:17