2

次のように、配列を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を作成したいと思います。

また、これは私自身の娯楽のためだけなので、コレクションのタイプは実際には重要ではありません。メソッドを作成するときにArrayListを使用しました。

ありがとう

4

2 に答える 2

2

メソッドjava.util.Arrays.asListとを使用する準備ができていますcom.google.common.primitives.Ints.asList

于 2013-03-19T23:58:41.087 に答える
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。これは一般的ではなく、プリミティブ配列タイプごとに新しいオーバーロードが必要になりますが、これが私が考えることができる最も近い解決策です。

于 2013-03-19T23:59:19.253 に答える