проблема дженериков Java при преобразовании из массива в вектор - PullRequest
0 голосов
/ 25 июня 2011

Почему это не разрешено? обр двойная [].

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

Я получаю нераспознанную ошибку конструктора. Он думает, что я пытаюсь использовать конструктор Vector(java.util.List<double[]>), который кажется странным, потому что это список двойных []? Он компилируется, если я сделаю это

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

но тогда я получаю предупреждение о непроверенном назначении

Ответы [ 4 ]

4 голосов
/ 25 июня 2011

Это потому, что Double - это не то же самое, что double в Java.

Arrays.asList не работает с примитивами , поэтому, когда вы вызываете его с double[] в качестве первого параметра, он думает, что вы передаете в сам массив в качестве первого аргумента в списке аргументов .... Поэтому Arrays.asList возвращает список double[], содержащий только один элемент: double[], который вы передали.

1 голос
/ 25 июня 2011

Дженерики типа List<double> не допускают примитивные типы, и именно поэтому ваша программа не работает.

Вам нужно перебрать массив и заполнить коллекцию предметами. Или вы можете использовать метод ArrayUtils.toObject () для преобразования из double[] в Double[]. Этот класс находится в библиотеке Apache Commons .

0 голосов
/ 25 июня 2011

Arrays.asList(T... a) не работает должным образом с примитивными массивами, потому что дженерики и примитивы не очень хорошо уживаются. Компилятор использует double[] для T, поэтому Arrays.asList возвращает List<double[]>.

Я думаю, что самый короткий код, чтобы получить то, что вы хотите:

Vector<Double> v = new Vector<Double>(arr.length);
for (double d : arr) v.add(d);
0 голосов
/ 25 июня 2011

Просто чтобы уточнить, «double» - это примитивный тип, такой как «int» или «char». «Double» - это тип класса. Вы можете сделать вектор. Измените исходный массив на массив Double, а не double.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...