Настройка списка значений для 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}));
Ответ 1
Вы должны использовать либо версию 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}));
Ответ 2
Странная и мало используемая идиома,
List<Integer> ints = new ArrayList<Integer>() {{add(1); add(2); add(3);}}
Это создает анонимный класс, который расширяет ArrayList (внешние скобки), а затем реализует инициализатор экземпляра (внутренние скобки) и вызывает там List.add().
Преимущество этого по сравнению с Arrays.asList()
заключается в том, что он работает для любого типа коллекции:
Map<String,String> m = new HashMap<>() {{
put("foo", "bar");
put("baz", "buz");
...
}}
Ответ 3
Другой вариант - использовать Guava ( "Коллекции Google" ), который имеет Lists.newArrayList(...).
Ваш код будет похож на
ArrayList<Integer> possibleValues2 = Lists.newArrayList(1,2,3,4,...);
Ответ 4
Из Java 7 SE docs:
List<Integer> possibleValues2 = Arrays.asList(1,2,3,4,5,6,7,8,9);