Инициализировать список <> с помощью 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"});
Другие вопросы по тегам