Инициализировать список <> с помощью Arrays.asList
Почему это работает:
String[] array = {"a", "b", "c"};
List<String> list = Arrays.asList(array);
но это не
List<String> list = Arrays.asList({"a","b","c"});
3 ответа
Это сокращение доступно только при создании и назначении массива.
String[] array = {"a", "b", "c"};
Вы можете сделать это, хотя:
List<String> list = Arrays.asList("a","b","c");
Как asList
может принимать аргументы "vararg"
Ваш вопрос: почему один работает, а другой нет, верно?
Ну, причина в том, что {"a","b","c"}
не является допустимым выражением Java, и поэтому компилятор не может его принять.
Похоже, вы подразумеваете, что хотите передать инициализатор массива без предоставления полного выражения создания массива (JLS 15.10).
Правильные выражения для создания массива, как указали другие:
String[] array = {"a", "b", "c"};
Как указано в JLS 10.6 инициализатора массива, или
String[] array = new String[]{"a", "b", "c"};
Как указано в JLS 15.10 Выражения создания массива.
Этот второй полезен для встраивания, так что вы можете передать его вместо переменной массива напрямую.
Так как asList
метод в Arrays
использует переменные аргументы, а выражения переменных переменных отображаются на массивы, вы можете передать встроенный массив, как в:
List<String> list = Arrays.asList(new String[]{"a", "b", "c"});
Или просто передайте переменные аргументы, которые будут автоматически сопоставлены с массивом:
List<String> list = Arrays.asList("a","b","c");
Ты можешь попробовать
List<String> list = Arrays.asList(new String[] {"a","b","c"});