Непосредственная установка значений для ArrayList в Java - PullRequest
11 голосов
/ 22 января 2011

Настройка списка значений для Java ArrayList работает:

Integer[] a = {1,2,3,4,5,6,7,8,9};
ArrayList<Integer> possibleValues2 = new ArrayList<Integer>(Arrays.asList(a));

Однако, следующее не работает и имеет ошибку «Недопустимый запуск типа», как и другие.Почему бы и нет?Поскольку первая строка в первом блоке кода - это просто присваивание, разве это не должно иметь никакого эффекта?

ArrayList<Integer> possibleValues2 = new ArrayList<Integer>(Arrays.asList({1,2,3,4,5,6,7,8,9}));

Ответы [ 4 ]

21 голосов
/ 22 января 2011

Вы должны использовать либо версию vararg Arrays.asList, например,

ArrayList<Integer> possibleValues2 =
    new ArrayList<Integer>(Arrays.asList(1,2,3,4,5,6,7,8,9));

, либо явно создать параметр массива, например,

ArrayList<Integer> possibleValues2 =
    new ArrayList<Integer>(Arrays.asList(new Integer[]{1,2,3,4,5,6,7,8,9}));
6 голосов
/ 22 января 2011

Странная и мало используемая идиома

List<Integer> ints = new ArrayList<Integer>() {{add(1); add(2); add(3);}}

Это создает анонимный класс, который расширяет ArrayList (внешние скобки), а затем реализует инициализатор экземпляра (внутренние скобки) и вызывает List.add ()там.

Хороший вопрос для интервью, если ничего больше.

3 голосов
/ 22 января 2011

Другой вариант - использовать Guava ("Google collection"), который имеет метод Lists.newArrayList (...) .

Ваш код будет выглядеть примерно так:

ArrayList<Integer> possibleValues2 = Lists.newArrayList(1,2,3,4,...);
0 голосов
/ 15 декабря 2016

Из документов Java 7 SE:

List<Integer> possibleValues2 = Arrays.asList(1,2,3,4,5,6,7,8,9);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...