2011-06-24 9 views
0

なぜこれは許可されていませんか? arrは二重[]です。配列からベクトルに変換するときのJavaジェネリックの問題

Vector<Double> v = new Vector<Double>(Arrays.asList(arr)); 

エラーが発生しました。認識できないコンストラクタエラーが発生しました。それは私が奇妙に思われるコンストラクタVector(java.util.List<double[]>)を使用しようとしていると思うなぜそれはダブル[]のリストになるのだろうか?私はそれがこの

Vector<Double> v = new Vector(Arrays.asList(arr)); 

作るが、その後、私はDoubleは、Javaでdoubleと同じではないためです未確認の割り当てに関する警告

答えて

4

を取得する場合にはコンパイルされます。あなたは、その最初のパラメータとしてdouble[]でそれを呼び出しているとき

Arrays.asList doesn't work with primitivesは、そう、それはあなたが...スタイルの引数リストの最初の引数として配列自体を渡していると考えています。 。あなたが渡されたdouble[]List<double>よう

1

ジェネリックは、プリミティブ型を許可していないと、プログラムが失敗する理由です:したがって、Arrays.asListのみ単一の要素を含む、double[]のリストを返します。

配列を繰り返し、コレクションアイテムを項目ごとに塗りつぶす必要があります。または、double[]からDouble[]に変換する方法はArrayUtils.toObject()です。そのクラスはApache Commonsライブラリにあります。

+0

ので、ベクターに、配列を変換する(各項目を反復することなく)簡単な方法はありません。

私はあなたが望む結果を得るための最短のコードがあると思いますか? – jhlu87

+0

@ jhlu87使用準備が整ったユーティリティメソッドへの参照が追加されました。 – Marcelo

0

'double'は 'int'や 'char'のようなプリミティブ型です。 'Double'はクラス型です。あなたはのベクトルを作ることができます。元の配列を 'Double'ではなく 'Double'の配列に変更します。

0

Arrays.asList(T... a)プリミティブ配列では、ジェネリックとプリミティブがうまくいっていないため、期待通りに機能しません。コンパイラはTdouble[]を使用しています。そのため、Arrays.asListList<double[]>を返します。

Vector<Double> v = new Vector<Double>(arr.length); 
for (double d : arr) v.add(d); 
関連する問題