次が機能しない理由がわかりません。
public void doSomething(int... args){
List<Integer> broken = new ArrayList<Integer>(Arrays.asList(args))
}
コンパイラが「int ... args」を配列に変換するので、上記のコードは機能するはずです。
働く代わりに私は得る:
シンボルsymbolが見つかりません:コンストラクターArrayList(Java.util.List
<int[]
>)location:クラスJava.util.ArrayList<Java.lang.Integer
>
それは奇妙です。配列リストに配列を追加するのではなく、リストの各要素を配列リストに追加します。どうしたの?
できるよ
public void doSomething(int... args){
List<Integer> ints = new ArrayList<Integer>(args.length);
for(int i: args) ints.add(i);
}
または
public void doSomething(Integer... args){
List<Integer> ints = Arrays.asList(args);
}
この場合、オートボクシング(int
からInteger
への自動変換)は機能しません。各int
をリストに手動で追加する必要があります。
そのようなコードが頻繁に必要な場合は、 commons lang にorg.Apache.commons.lang.ArrayUtils.toObject(int[])
を使用することを検討してください
Guavaを使用してこれを解決できます。
List<Integer> broken = new ArrayList<>(Ints.asList(args))
またはストリームで:
List<Integer> broken = Arrays
.stream(array)
.boxed()
.collect(Collectors.toCollection(ArrayList::new));