将数组转换为ArrayList的通用方法

时间:2013-03-19 23:52:25

标签: java generics

我有一个方法将数组转换为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.

我想我必须将数组转换为Integer数组,如果我希望该方法有效,但是有没有办法让这个方法更巧妙地处理它的处理方式呢?

Java教程网站包含以下内容:

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

哪个会起作用,但我想要创建ArrayList的方法。

另外,这只是为了我自己的娱乐,所以Collection的类型并不重要,我在编写方法时只使用了ArrayList。

由于

2 个答案:

答案 0 :(得分:2)

没有可以使用基元的通用方法,因为基元不能是通用类型。您可以使用纯Java进行最接近的操作是使用getArrayList ...

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

会为您int打包。它不是通用的,你需要为每个原始数组类型添加一个新的重载,但这是我能想到的最接近的解决方案。

答案 1 :(得分:1)

准备使用方法java.util.Arrays.asListcom.google.common.primitives.Ints.asList